Successivo: , Precedente: , Su: Stampare   [Contenuti][Indice]


5.10 Abilitare continuazione dopo errori in output

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:

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: , Precedente: , Su: Stampare   [Contenuti][Indice]