Successivo: , Precedente: , Su: Esempi di estensione   [Contenuti][Indice]


17.7.6 Leggere directory

L’estensione readdir aggiunge un analizzatore di input per esaminare directory. L’uso è il seguente:

@load "readdir"

Quando quest’estensione è in uso, invece che saltare le directory presenti sulla riga di comando, (o accedute tramite getline), queste sono lette, e ogni elemento della directory è restituito come un record.

Il record consiste di tre campi. I primi due sono il numero di inode e il nome-file, separati fra loro da una barra. Nei sistemi in cui l’elemento di directory contiene il tipo del file, il record ha un terzo campo (pure separato da una barra), composto da una sola lettera, che indica il tipo del file. Le lettere e i tipi di file a cui corrispondono sono mostrate in Tabella 17.4.

LetteraTipo di file
bDispositivo a blocchi
cDispositivo a caratteri
dDirectory
fFile normale
lCollegamento simbolico
ppipe con nome (FIFO)
ssocket
uTutto il resto (sconosciuto)

Tabella 17.4: Tipi file restituiti dall’estensione readdir

Nei sistemi che non contengono l’informazione sul tipo del file, il terzo campo è sempre ‘u’.

NOTA: Nei sistemi GNU/Linux, ci sono fileystem che non supportano il campo d_type (si veda la pagina di manuale readdir(3)), e in questo caso il tipo di file è sempre ‘u’. Si può usare l’estensione filefuncs per chiamare stat() e ottenere l’informazione corretta sul tipo di file.

Per default, se non è possibile aprire una directory (p.es. per problemi di autorizzazione), gawk termina l’esecuzione. Come per i file normali, questa situazione può essere gestita usando una regola BEGINFILE che controlli il contenuto della variabile ERRNO e stampi un messaggio di errore oppure gestisca il problema in qualche altro modo.

Ecco un esempio:

@load "readdir"
…
BEGIN { FS = "/" }
{ print "nome-file è", $2 }

Successivo: , Precedente: , Su: Esempi di estensione   [Contenuti][Indice]