Successivo: Operazioni interne file, Su: Esempio di estensione [Contenuti][Indice]
chdir()
e stat()
Questa
sezione mostra come usare le nuove funzioni a
livello di awk
una volta che siano state integrate nell’interprete
del programma gawk
in esecuzione. Usare chdir()
è molto
semplice. Richiede un solo argomento, la nuova directory su cui
posizionarsi:
@load "filefuncs" … newdir = "/home/arnold/funstuff" ret = chdir(newdir) if (ret < 0) { printf("non riesco a passare a %s: %s\n", newdir, ERRNO) > "/dev/stderr" exit 1 } …
Il valore restituito è negativo se la chiamata a chdir()
non è riuscita,
ed ERRNO
(vedi la sezione Variabili predefinite) è impostato a una stringa
che descrive l’errore.
Usare stat()
è un po’ più complicato. La funzione scritta in C
stat()
riempie una struttura che ha una certa quantità di informazioni.
La maniera corretta per immagazzinarle in awk
è quella di riempire
un vettore associativo con le informazioni appropriate:
file = "/home/arnold/.profile"
ret = stat(file, fdata)
if (ret < 0) {
printf("non è stato possibile eseguire stat
per %s: %s\n",
file, ERRNO) > "/dev/stderr"
exit 1
}
printf("dimensione di %s è %d byte\n", file, fdata["size"])
La funzione stat()
svuota sempre il vettore che contiene i dati,
anche nel caso che la chiamata a stat()
non riesca. I seguenti
elementi vengono restituiti dalla funzione:
"name"
Il nome del file oggetto della chiamata a stat()
.
"dev"
"ino"
I numeri di device e di inode, rispettivamente.
"mode"
Il modo del file, in formato numerico. Questo include sia il tipo di file che i suoi permessi di accesso.
"nlink"
Il numero di collegamenti fisici del file (stesso file con diversi nomi).
"uid"
"gid"
Gli identificativi di utente e di gruppo del possessore del file.
"size"
La dimensione in byte del file.
"blocks"
Il numero di blocchi su disco realmente occupati dal file. Questo può non essere proporzionale alla dimensione del file se il file ha delle lacune [ossia se solo alcune parti del file esistono veramente, il resto non è ancora stato riempito].
"atime"
"mtime"
"ctime"
La data e ora dell’ultimo accesso, modifica, e aggiornamento dell’inode,
rispettivamente. Questi sono delle marcature temporali numeriche
(misurate in secondi dal
01 gennaio 1970), che possono essere formattate dalla funzione
strftime()
(vedi la sezione Funzioni per gestire marcature temporali).
"pmode"
La modalità stampabile (“printable mode”) del file.
Questo è una stringa che rappresenta
il tipo del file e i permessi di accesso, come sono visualizzati da
‘ls -l’—per esempio, "drwxr-xr-x"
.
"type"
Una stringa stampabile che descrive il tipo di file. Il valore è uno dei seguenti:
"blockdev"
"chardev"
Il file è un dispositico a blocchi o a caratteri (“file speciale”).
"directory"
Il file è una directory.
"fifo"
Il file è una pipe denominata (nota anche come FIFO [First In First Out]).
"file"
Il file è un file normale.
"socket"
Il file è un socket AF_UNIX
(“Unix domain”) nel
filesystem.
"symlink"
Il file è un collegamento simbolico.
"devbsize"
La dimensione di un blocco per l’elemento indicizzato da "blocks"
.
Questa informazione è derivata dalla costante DEV_BSIZE
definita in <sys/param.h>
nella maggior parte dei sistemi,
o dalla costante S_BLKSIZE
in <sys/stat.h>
nei sistemi BSD.
Per alcuni altri sistemi il valore si basa su una conoscenza a priori
delle caratteristiche di un particolare sistema.
Se non si riesce a determinare il valore, viene
restituito quello di default, che è 512.
Possono essere presenti diversi altri elementi, a seconda del
sistema operativo e del tipo di file.
Si può controllarne la presenza dal programma awk
per mezzo
dell’operatore in
(vedi la sezione Come esaminare un elemento di un vettore):
"blksize"
La dimensione preferita di un blocco per effettuare operazioni di I/O sul file.
Questo campo non è presente nella struttura C stat
di tutti i sistemi
che rispettano lo standard POSIX.
"linkval"
Se il file è un collegamento simbolico, questo elemento è il nome del file puntato dal collegamento simbolico (cioè, il valore del collegamento).
"rdev"
"major"
"minor"
Se il file è un dispositivo a blocchi o a caratteri, questi valori rappresentano il numero del dispositivo e, rispettivamente, le componenti principale e secondaria di quel numero.
Successivo: Operazioni interne file, Su: Esempio di estensione [Contenuti][Indice]