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


5.7 File speciali per flussi standard di dati pre-aperti

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:

/dev/stdin

Lo standard input (descrittore di file 0).

/dev/stdout

Lo standard output (descrittore di file 1).

/dev/stderr

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).


Note a piè di pagina

(27)

“tty” in /dev/tty è un’abbreviazione di “TeleTYpe” [telescrivente], un terminale seriale.


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