Successivo: Variabili dell'estensione API, Precedente: Manipolazione di vettori, Su: Descrizione dell'estensione API [Contenuti][Indice]
La seguente funzione consente alle estensioni di accedere e di manipolare delle ridirezioni.
awk_bool_t get_file(const char *nome,
size_t name_len,
const char *tipofile,
int fd,
const awk_input_buf_t **ibufp,
const awk_output_buf_t **obufp);
Ricerca il file nome
nella tabella interna di ridirezione di
gawk
.
Se nome
è NULL
o name_len
è zero, restituisce
i dati del file in input correntemente aperto il cui nome è memorizzato in
FILENAME
.
(Questa chiamata non usa l’argomento filetype
, che, quindi, può essere
lasciato indefinito).
Se il file non è già aperto, tenta di aprirlo.
L’argomento filetype
deve terminare con uno zero binario, e dovrebbe
dovrebbe avere uno di questi valori:
">"
Un file aperto in output.
">>"
Un file aperto in output, record aggiunti a fine file, dopo quelli già esistenti [append].
"<"
Un file aperto in input.
"|>"
Una pipe aperta in output.
"|<"
Una pipe aperta in input.
"|&"
Un coprocesso bidirezionale.
In caso di errore, restituisce il valore awk_false
.
Altrimenti, restituisce
awk_true
, insieme a ulteriori informazioni sulla ridirezione
nei puntatori ibufp
e obufp
.
Per ridirezioni di input il valore *ibufp
non dovrebbe essere
NULL
, mentre *obufp
dovrebbe essere NULL
.
Per ridirezioni di input,
il valore di *ibufp
dovrebbe essere non-NULL
, e *obufp
dovrebbe essere NULL
.
Per ridirezioni di output,
il valore di *obufp
dovrebbe essere non-NULL
, e *ibufp
dovrebbe essere NULL
.
Per coprocessi bidirezionali, ognuno dei due
valori dovrebbe essere non-NULL
.
Normalmente, l’estensione è interessata a (*ibufp)->fd
e/o fileno((*obufp)->fp)
. Se il file non è già
aperto, e l’argomento fd
non è negativo, gawk
userà quel descrittore di file invece di aprire il file nella
maniera solita. Se l’fd
non è negativo, ma il file esiste già,
gawk
ignora l’fd
e restituisce il file esistente. È
responsabilità del chiamante notare che né l’fd
nella struttura
restituita awk_input_buf_t
, né l’fd
nella struttura restituita
awk_output_buf_t
contiene il valore richiesto.
Si noti che fornire un descrittore di file non è al momento supportato
per le pipe. Tuttavia, l’utilizzo di un descrittore di file
dovrebbe essere possibile per socket in input, output,
aggiunta-a-fine-file (append), e bidirezionale (coprocessi).
Se filetype
è bidirezionale, gawk
presuppone che sia un
socket! Si noti che nel caso
bidirezionale i descrittori di file in input e output possono essere
differenti.
Per essere sicuri che tutto sia andato bene, si deve controllare che uno dei due
corrisponda alla richiesta.
Si prevede che questa funzione API verrà usata per parallelizzare l’I/O e rendere disponibile una libreria per i socket.
Successivo: Variabili dell'estensione API, Precedente: Manipolazione di vettori, Su: Descrizione dell'estensione API [Contenuti][Indice]