Successivo: Sommario di Output, Precedente: Chiusura file e pipe, Su: Stampare [Contenuti][Indice]
Questa
sezione descrive una funzionalità disponibile solo in
gawk
.
In awk
standard, l’output con print
o printf
a un file che non esiste, o qualche altro errore di I/O (come p.es.
esaurire lo spazio disponibile su disco) è un errore fatale (termina
l’esecuzione del programma).
$ gawk 'BEGIN { print "ciao" > "/file/non/esistente" }' error→ gawk: riga com.:1: fatale: non riesco a ri-dirigere a error→ `/file/non/esistente' (/file o directory non esistente)
gawk
rende possibile accorgersi che c’è stato un errore,
permettendo di tentare di rimediare, o almeno di stampare un messaggio
di errore prima di terminare il programma.
È possibile fare questo in due modi differenti:
PROCINFO["NONFATAL"]
.
PROCINFO[nome_file, "NONFATAL"]
.
nome_file è il nome del file per il quale
si desidera che l’errore di output non faccia terminare il programma.
Una volta abilitata la continuazione dopo un errore di output, si dovrà
controllare la variabile ERRNO
dopo ogni istruzione
print
o printf
diretta a quel file, per controllare che
tutto sia andato a buon fine. È anche una buona idea inizializzare
ERRNO
a zero prima di tentare l’operazione di scrittura.
Per esempio:
$ gawk ' > BEGIN { > PROCINFO["NONFATAL"] = 1 > ERRNO = 0 > print "ciao" > "/file/non/esistente" > if (ERRNO) { > print("Output non riuscito:", ERRNO) > "/dev/stderr" > exit 1 > } > }' error→ Output non riuscito: No such file or directory
gawk
non genera un errore fatale; permette invece
al programma awk
di rendersi conto del problema e di gestirlo.
Questo meccanismo si applica anche allo standard output e allo standard error.
Per lo standard output, si può usare PROCINFO["-", "NONFATAL"]
o PROCINFO["/dev/stdout", "NONFATAL"]
.
Per lo standard error, occorre
usare PROCINFO["/dev/stderr", "NONFATAL"]
.
Se si tenta di aprire un socket TCP/IP (vedi la sezione Usare gawk
per la programmazione di rete),
gawk
tenta di farlo per un certo numero di volte.
La variabile d’ambiente GAWK_SOCK_RETRIES
(vedi la sezione Le variabili d’ambiente.) consente di alterare il numero di
tentativi che gawk
farebbe per default. Tuttavia,
una volta abilitata la continuazione dopo un errore di I/O per un certo
socket, gawk
si limita a un solo tentativo,
lasciando al codice del programma awk
il compito di gestire
l’eventuale problema.
Successivo: Sommario di Output, Precedente: Chiusura file e pipe, Su: Stampare [Contenuti][Indice]