Successivo: , Precedente: , Su: Descrizione dell'estensione API   [Contenuti][Indice]


17.4.12 Accedere alle ridirezioni e modificarle

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: , Precedente: , Su: Descrizione dell'estensione API   [Contenuti][Indice]