Successivo: File speciali, Precedente: Ridirezione, Su: Stampare [Contenuti][Indice]
I programmi in esecuzione hanno convenzionalmente tre flussi di input e output a disposizione, già aperti per la lettura e la scrittura. Questi sono noti come lo standard input, lo standard output e lo standard error output. A questi flussi aperti (e a tutti gli altri file aperti o pipe) si fa spesso riferimento usando il termine tecnico descrittori di file [FD].
Questi flussi sono, per default, associati alla tastiera e allo schermo, ma spesso sono ridiretti, nella shell, utilizzando gli operatori ‘<’, ‘<<’, ‘>’, ‘>>’, ‘>&’ e ‘|’. Lo standard error è tipicamente usato per scrivere messaggi di errore; la ragione per cui ci sono due flussi distinti, standard output e standard error, è per poterli ridirigere indipendentemente l’uno dall’altro.
Nelle tradizionali implementazioni di awk
, il solo modo per
scrivere un messaggio di errore allo
standard error in un programma awk
è il seguente:
print "Ho trovato un errore grave!" | "cat 1>&2"
Con quest’istruzione si apre una pipeline verso un comando della shell
che è in grado di accedere al flusso di standard error che eredita dal
processo awk
.
Questo è molto poco elegante, e richiede anche di innescare un processo
separato. Per questo chi scrive programmi awk
spesso
non usa questo metodo. Invece, invia i messaggi di errore allo
schermo, in questo modo:
print "Ho trovato un errore grave!" > "/dev/tty"
(/dev/tty è un file speciale fornito dal sistema operativo
ed è connesso alla tastiera e allo schermo. Rappresenta il
“terminale”,27 che nei sistemi odierni
è una tastiera e uno schermo, e non una console seriale).
Questo ha generalmente lo stesso effetto, ma non è sempre detto: sebbene il
flusso di standard error sia solitamente diretto allo schermo, potrebbe
essere stato
ridiretto; se questo è il caso, scrivere verso lo schermo non serve. In
effetti, se awk
è chiamato da un lavoro che non è eseguito
interattivamente,
può non avere a disposizione alcun terminale su cui scrivere.
In quel caso, l’apertura di /dev/tty genera un errore.
gawk
, BWK awk
, e mawk
mettono a disposizione
speciali nomi-file per accedere ai tre flussi standard.
Se il nome-file coincide con uno di questi nomi speciali, quando
gawk
(o uno degli altri) ridirige l’input o l’output, usa
direttamente il descrittore di file identificato dal nome-file. Questi
nomi-file sono gestiti così in tutti i sistemi operativi nei quali
gawk
è disponibile, e non solo in quelli che aderiscono allo
standard POSIX:
Lo standard input (descrittore di file 0).
Lo standard output (descrittore di file 1).
Lo standard error output (descrittore di file 2).
Usando questa funzionalità la maniera corretta di scrivere un messaggio di errore diviene quindi:
print "Ho trovato un errore grave!" > "/dev/stderr"
Si noti l’uso di doppi apici per racchiudere il nome-file. Come per ogni altra ridirezione, il valore dev’essere una stringa. È un errore comune omettere i doppi apici, il che conduce a risultati inattesi.
gawk
non tratta questi nomi-file come speciali quando opera
in modalità di compatibilità POSIX. Comunque, poiché BWK awk
li prevede, gawk
li ammette anche quando viene
invocato con l’opzione --traditional (vedi la sezione Opzioni sulla riga di comando).
“tty” in /dev/tty è un’abbreviazione di “TeleTYpe” [telescrivente], un terminale seriale.
Successivo: File speciali, Precedente: Ridirezione, Su: Stampare [Contenuti][Indice]