X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=3d59617e72405b66df178060a0ff7ad2e783d44f;hp=7ba42651e4861ca0bbfb06fc6420444e6fc2134a;hb=718a0a24b34dce09e40eafc33c02ae494d100181;hpb=9c3be0a6a901fad667ba1abcd8b46c712020cf26 diff --git a/filedir.tex b/filedir.tex index 7ba4265..3d59617 100644 --- a/filedir.tex +++ b/filedir.tex @@ -73,19 +73,19 @@ principali, come risultano dalla pagina di manuale, sono le seguenti: caso di errore. La variabile \var{errno} viene impostata opportunamente, i principali codici di errore sono: \begin{errlist} - \item[\macro{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo + \item[\errcode{EXDEV}] \param{oldpath} e \param{newpath} non sono sullo stesso filesystem. - \item[\macro{EPERM}] il filesystem che contiene \var{oldpath} e - \macro{newpath} non supporta i link diretti o è una directory. - \item[\macro{EEXIST}] un file (o una directory) con quel nome esiste di + \item[\errcode{EPERM}] il filesystem che contiene \param{oldpath} e + \param{newpath} non supporta i link diretti o è una directory. + \item[\errcode{EEXIST}] un file (o una directory) con quel nome esiste di già. - \item[\macro{EMLINK}] ci sono troppi link al file \var{oldpath} (il - numero massimo è specificato dalla variabile \macro{LINK\_MAX}, vedi + \item[\errcode{EMLINK}] ci sono troppi link al file \param{oldpath} (il + numero massimo è specificato dalla variabile \const{LINK\_MAX}, vedi \secref{sec:sys_limits}). \end{errlist} - ed inoltre \macro{EACCES}, \macro{ENAMETOOLONG}, \macro{ENOTDIR}, - \macro{EFAULT}, \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP}, - \macro{ENOSPC}, \macro{EIO}.} + ed inoltre \errval{EACCES}, \errval{ENAMETOOLONG}, \errval{ENOTDIR}, + \errval{EFAULT}, \errval{ENOMEM}, \errval{EROFS}, \errval{ELOOP}, + \errval{ENOSPC}, \errval{EIO}.} \end{prototype} La creazione di un nuovo collegamento diretto non copia il contenuto del file, @@ -115,7 +115,7 @@ Data la pericolosit simbolici che possono fornire la stessa funzionalità senza questi problemi, nei filesystem usati in Linux questa caratteristica è stata completamente disabilitata, e al tentativo di creare un link diretto ad una directory la -funzione restituisce l'errore \macro{EPERM}. +funzione restituisce l'errore \errcode{EPERM}. La rimozione di un file (o più precisamente della voce che lo referenzia all'interno di una directory) si effettua con la funzione \func{unlink}; il @@ -131,17 +131,18 @@ suo prototipo errore, nel qual caso il file non viene toccato. La variabile \var{errno} viene impostata secondo i seguenti codici di errore: \begin{errlist} - \item[\macro{EISDIR}] \var{pathname} si riferisce ad una directory + \item[\errcode{EISDIR}] \var{pathname} si riferisce ad una directory (valore specifico ritornato da Linux che non consente l'uso di \var{unlink} con le directory, e non conforme allo standard POSIX, che - prescrive invece l'uso di \macro{EPERM} in caso l'operazione non sia + prescrive invece l'uso di \errcode{EPERM} in caso l'operazione non sia consentita o il processo non abbia privilegi sufficienti). - \item[\macro{EROFS}] \var{pathname} è su un filesystem montato in sola + \item[\errcode{EROFS}] \var{pathname} è su un filesystem montato in sola lettura. - \item[\macro{EISDIR}] \var{pathname} fa riferimento a una directory. + \item[\errcode{EISDIR}] \var{pathname} fa riferimento a una directory. \end{errlist} - ed inoltre: \macro{EACCES}, \macro{EFAULT}, \macro{ENOENT}, \macro{ENOTDIR}, - \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP}, \macro{EIO}.} + ed inoltre: \errval{EACCES}, \errval{EFAULT}, \errval{ENOENT}, + \errval{ENOTDIR}, \errval{ENOMEM}, \errval{EROFS}, \errval{ELOOP}, + \errval{EIO}.} \end{prototype} Per cancellare una voce in una directory è necessario avere il permesso di @@ -210,37 +211,38 @@ nello stesso filesystem) si usa invece la funzione \func{rename},\footnote{la errore, nel qual caso il file non viene toccato. La variabile \var{errno} viene impostata secondo i seguenti codici di errore: \begin{errlist} - \item[\macro{EISDIR}] \var{newpath} è una directory mentre \var{oldpath} non - è una directory. - \item[\macro{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo stesso + \item[\errcode{EISDIR}] \var{newpath} è una directory mentre \var{oldpath} + non è una directory. + \item[\errcode{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo stesso filesystem. - \item[\macro{ENOTEMPTY}] \var{newpath} è una directory già esistente e non + \item[\errcode{ENOTEMPTY}] \var{newpath} è una directory già esistente e non vuota. - \item[\macro{EBUSY}] o \var{oldpath} o \var{newpath} sono in uso da parte di - qualche processo (come directory di lavoro o come radice) o del sistema + \item[\errcode{EBUSY}] o \var{oldpath} o \var{newpath} sono in uso da parte + di qualche processo (come directory di lavoro o come radice) o del sistema (come mount point). - \item[\macro{EINVAL}] \var{newpath} contiene un prefisso di \var{oldpath} o + \item[\errcode{EINVAL}] \var{newpath} contiene un prefisso di \var{oldpath} o più in generale si è cercato di creare una directory come sottodirectory di se stessa. - \item[\macro{ENOTDIR}] Uno dei componenti dei pathname non è una directory o - \var{oldpath} è una directory e \var{newpath} esiste e non è una + \item[\errcode{ENOTDIR}] Uno dei componenti dei pathname non è una directory + o \var{oldpath} è una directory e \var{newpath} esiste e non è una directory. \end{errlist} - ed inoltre \macro{EACCESS}, \macro{EPERM}, \macro{EMLINK}, \macro{ENOENT}, - \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP} e \macro{ENOSPC}.} + ed inoltre \errval{EACCES}, \errval{EPERM}, \errval{EMLINK}, + \errval{ENOENT}, \errval{ENOMEM}, \errval{EROFS}, \errval{ELOOP} e + \errval{ENOSPC}.} \end{prototype} Il comportamento della funzione è diverso a seconda che si voglia rinominare un file o una directory; se ci riferisce a un file allora \var{newpath}, se esiste, non deve essere una directory (altrimenti si ha l'errore -\macro{EISDIR}). Nel caso \var{newpath} indichi un file esistente questo viene -cancellato e rimpiazzato (atomicamente). +\errcode{EISDIR}). Nel caso \var{newpath} indichi un file esistente questo +viene cancellato e rimpiazzato (atomicamente). Se \var{oldpath} è una directory allora \var{newpath}, se esiste, deve essere -una directory vuota, altrimenti si avranno gli errori \macro{ENOTDIR} (se non -è una directory) o \macro{ENOTEMPTY} (se non è vuota). Chiaramente +una directory vuota, altrimenti si avranno gli errori \errcode{ENOTDIR} (se +non è una directory) o \errcode{ENOTEMPTY} (se non è vuota). Chiaramente \var{newpath} non può contenere \var{oldpath} altrimenti si avrà un errore -\macro{EINVAL}. +\errcode{EINVAL}. Se \var{oldpath} si riferisce a un link simbolico questo sarà rinominato; se \var{newpath} è un link simbolico verrà cancellato come qualunque altro file. @@ -295,17 +297,17 @@ specificato. La funzione che permette di creare un nuovo link simbolico \bodydesc{La funzione restituisce zero in caso di successo e -1 per un errore, nel qual caso la variabile \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EPERM}] il filesystem che contiene \param{newpath} non supporta - i link simbolici. - \item[\macro{ENOENT}] una componente di \param{newpath} non esiste o + \item[\errcode{EPERM}] il filesystem che contiene \param{newpath} non + supporta i link simbolici. + \item[\errcode{ENOENT}] una componente di \param{newpath} non esiste o \param{oldpath} è una stringa vuota. - \item[\macro{EEXIST}] esiste già un file \param{newpath}. - \item[\macro{EROFS}] \param{newpath} è su un filesystem montato in sola + \item[\errcode{EEXIST}] esiste già un file \param{newpath}. + \item[\errcode{EROFS}] \param{newpath} è su un filesystem montato in sola lettura. \end{errlist} - ed inoltre \macro{EFAULT}, \macro{EACCES}, \macro{ENAMETOOLONG}, - \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, \macro{ENOSPC} e - \macro{EIO}.} + ed inoltre \errval{EFAULT}, \errval{EACCES}, \errval{ENAMETOOLONG}, + \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, \errval{ENOSPC} e + \errval{EIO}.} \end{prototype} Si tenga presente che la funzione non effettua nessun controllo sull'esistenza @@ -375,12 +377,12 @@ la funzione \func{readlink}, il cui prototipo \var{buff} o -1 per un errore, nel qual caso la variabile \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EINVAL}] \param{path} non è un link simbolico o \param{size} + \item[\errcode{EINVAL}] \param{path} non è un link simbolico o \param{size} non è positiva. \end{errlist} - ed inoltre \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT}, - \macro{EACCES}, \macro{ELOOP}, \macro{EIO}, \macro{EFAULT} e - \macro{ENOMEM}.} + ed inoltre \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT}, + \errval{EACCES}, \errval{ELOOP}, \errval{EIO}, \errval{EFAULT} e + \errval{ENOMEM}.} \end{prototype} La funzione apre il link simbolico, ne legge il contenuto, lo scrive nel @@ -415,9 +417,9 @@ directory porterebbe il comando ad esaminare \file{/boot}, \file{/boot/boot}, Per questo motivo il kernel e le librerie prevedono che nella risoluzione di un pathname possano essere seguiti un numero limitato di link simbolici, il -cui valore limite è specificato dalla costante \macro{MAXSYMLINKS}. Qualora +cui valore limite è specificato dalla costante \const{MAXSYMLINKS}. Qualora questo limite venga superato viene generato un errore ed \var{errno} viene -impostata al valore \macro{ELOOP}. +impostata al valore \errcode{ELOOP}. Un punto da tenere sempre presente è che, come abbiamo accennato, un link simbolico può fare riferimento anche ad un file che non esiste; ad esempio @@ -454,21 +456,23 @@ accedere ai tipi usati da queste funzioni si deve includere il file \bodydesc{La funzione restituisce zero in caso di successo e -1 per un errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EEXIST}] Un file (o una directory) con quel nome esiste di già. - \item[\macro{EACCESS}] + \item[\errcode{EEXIST}] Un file (o una directory) con quel nome esiste di + già. + \item[\errcode{EACCES}] Non c'è il permesso di scrittura per la directory in cui si vuole inserire la nuova directory. - \item[\macro{EMLINK}] La directory in cui si vuole creare la nuova directory - contiene troppi file. Sotto Linux questo normalmente non avviene perché il - filesystem standard consente la creazione di un numero di file maggiore di - quelli che possono essere contenuti nel disco, ma potendo avere a che - fare anche con filesystem di altri sistemi questo errore può presentarsi. - \item[\macro{ENOSPC}] Non c'è abbastanza spazio sul file system per creare + \item[\errcode{EMLINK}] La directory in cui si vuole creare la nuova + directory contiene troppi file. Sotto Linux questo normalmente non avviene + perché il filesystem standard consente la creazione di un numero di file + maggiore di quelli che possono essere contenuti nel disco, ma potendo + avere a che fare anche con filesystem di altri sistemi questo errore può + presentarsi. + \item[\errcode{ENOSPC}] Non c'è abbastanza spazio sul file system per creare la nuova directory o si è esaurita la quota disco dell'utente. \end{errlist} - ed inoltre anche \macro{EPERM}, \macro{EFAULT}, \macro{ENAMETOOLONG}, - \macro{ENOENT}, \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, - \macro{EROFS}.} + ed inoltre anche \errval{EPERM}, \errval{EFAULT}, \errval{ENAMETOOLONG}, + \errval{ENOENT}, \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, + \errval{EROFS}.} \end{prototype} La funzione crea una nuova directory vuota (che contiene solo le due voci @@ -489,20 +493,20 @@ suo prototipo \bodydesc{La funzione restituisce zero in caso di successo e -1 per un errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EPERM}] Il filesystem non supporta la cancellazione di + \item[\errcode{EPERM}] Il filesystem non supporta la cancellazione di directory, oppure la directory che contiene \var{dirname} ha lo sticky bit impostato e l'userid effettivo del processo non corrisponde al proprietario della directory. - \item[\macro{EACCESS}] Non c'è il permesso di scrittura per la directory che - contiene la directory che si vuole cancellare, o non c'è il permesso di - attraversare (esecuzione) una delle directory specificate in + \item[\errcode{EACCES}] Non c'è il permesso di scrittura per la directory + che contiene la directory che si vuole cancellare, o non c'è il permesso + di attraversare (esecuzione) una delle directory specificate in \var{dirname}. - \item[\macro{EBUSY}] La directory specificata è la directory di lavoro o la + \item[\errcode{EBUSY}] La directory specificata è la directory di lavoro o la radice di qualche processo. - \item[\macro{ENOTEMPTY}] La directory non è vuota. + \item[\errcode{ENOTEMPTY}] La directory non è vuota. \end{errlist} - ed inoltre anche \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, - \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, \macro{EROFS}.} + ed inoltre anche \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT}, + \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, \errval{EROFS}.} \end{prototype} La modalità con cui avviene la cancellazione è analoga a quella di @@ -537,16 +541,16 @@ di queste funzioni \bodydesc{La funzione restituisce zero in caso di successo e -1 per un errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EPERM}] Non si hanno privilegi sufficienti a creare l'inode, o + \item[\errcode{EPERM}] Non si hanno privilegi sufficienti a creare l'inode, o il filesystem su cui si è cercato di creare \func{pathname} non supporta l'operazione. - \item[\macro{EINVAL}] Il valore di \var{mode} non indica un file, una fifo o - un dipositivo. - \item[\macro{EEXIST}] \param{pathname} esiste già o è un link simbolico. + \item[\errcode{EINVAL}] Il valore di \var{mode} non indica un file, una fifo + o un dipositivo. + \item[\errcode{EEXIST}] \param{pathname} esiste già o è un link simbolico. \end{errlist} - ed inoltre anche \macro{EFAULT}, \macro{EACCESS}, \macro{ENAMETOOLONG}, - \macro{ENOENT}, \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, - \macro{ENOSPC}, \macro{EROFS}.} + ed inoltre anche \errval{EFAULT}, \errval{EACCES}, \errval{ENAMETOOLONG}, + \errval{ENOENT}, \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, + \errval{ENOSPC}, \errval{EROFS}.} \end{functions} La funzione permette di creare un file speciale, ma si può usare anche per @@ -556,10 +560,10 @@ file che si vuole creare ed i relativi permessi, secondo i valori riportati in permessi sono comunque modificati nella maniera usuale dal valore di \var{umask} (si veda \secref{sec:file_umask}). -Per il tipo di file può essere specificato solo uno fra: \macro{S\_IFREG} per -un file regolare (che sarà creato vuoto), \macro{S\_IFBLK} per un device a -blocchi, \macro{S\_IFCHR} per un device a caratteri e \macro{S\_IFIFO} per una -fifo. Un valore diverso comporterà l'errore \macro{EINVAL}. Qualora si sia +Per il tipo di file può essere specificato solo uno fra: \const{S\_IFREG} per +un file regolare (che sarà creato vuoto), \const{S\_IFBLK} per un device a +blocchi, \const{S\_IFCHR} per un device a caratteri e \const{S\_IFIFO} per una +fifo. Un valore diverso comporterà l'errore \errcode{EINVAL}. Qualora si sia specificato in \param{mode} un file di dispositivo, il valore di \param{dev} viene usato per indicare a quale dispositivo si fa riferimento. @@ -584,9 +588,9 @@ Per creare una fifo (un file speciale, su cui torneremo in dettaglio in \funcdecl{int mkfifo(const char *pathname, mode\_t mode)} Crea una fifo. \bodydesc{La funzione restituisce zero in caso di successo e -1 per un - errore, nel qual caso \var{errno} assumerà i valori \macro{EACCESS}, - \macro{EEXIST}, \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOSPC}, - \macro{ENOTDIR} e \macro{EROFS}.} + errore, nel qual caso \var{errno} assumerà i valori \errval{EACCES}, + \errval{EEXIST}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOSPC}, + \errval{ENOTDIR} e \errval{EROFS}.} \end{functions} \noindent come per \func{mknod} il file \param{pathname} non deve esistere (neanche come link simbolico); al solito i permessi specificati da @@ -640,14 +644,14 @@ apposita funzione di libreria, \func{getcwd}, il cui prototipo allocata, per una dimensione massima di \var{size}. \bodydesc{La funzione restituisce il puntatore \var{buffer} se riesce, - \macro{NULL} se fallisce, in quest'ultimo caso la variabile + \val{NULL} se fallisce, in quest'ultimo caso la variabile \var{errno} è impostata con i seguenti codici di errore: \begin{errlist} - \item[\macro{EINVAL}] L'argomento \var{size} è zero e \var{buffer} non + \item[\errcode{EINVAL}] L'argomento \var{size} è zero e \var{buffer} non è nullo. - \item[\macro{ERANGE}] L'argomento \var{size} è più piccolo della + \item[\errcode{ERANGE}] L'argomento \var{size} è più piccolo della lunghezza del pathname. - \item[\macro{EACCESS}] Manca il permesso di lettura o di ricerca su uno dei + \item[\errcode{EACCES}] Manca il permesso di lettura o di ricerca su uno dei componenti del pathname (cioè su una delle directory superiori alla corrente). \end{errlist}} @@ -666,7 +670,7 @@ volta cessato il suo utilizzo. Di questa funzione esiste una versione \code{char *getwd(char *buffer)} fatta per compatibilità all'indietro con BSD, che non consente di specificare la dimensione del buffer; esso deve essere allocato in precedenza ed avere una -dimensione superiore a \macro{PATH\_MAX} (di solito 256 byte, vedi +dimensione superiore a \const{PATH\_MAX} (di solito 256 byte, vedi \secref{sec:sys_limits}); il problema è che in Linux non esiste una dimensione superiore per un pathname, per cui non è detto che il buffer sia sufficiente a contenere il nome del file, e questa è la ragione principale per cui questa @@ -674,7 +678,7 @@ funzione Una seconda funzione simile è \code{char *get\_current\_dir\_name(void)} che è sostanzialmente equivalente ad una \code{getcwd(NULL, 0)}, con la sola -differenza che essa ritorna il valore della variabile di ambiente \macro{PWD}, +differenza che essa ritorna il valore della variabile di ambiente \val{PWD}, che essendo costruita dalla shell può contenere un pathname comprendente anche dei link simbolici. Usando \func{getcwd} infatti, essendo il pathname ricavato risalendo all'indietro l'albero della directory, si perderebbe traccia di ogni @@ -689,12 +693,12 @@ appunto per \textit{change directory}, il suo prototipo \bodydesc{La funzione restituisce 0 in caso di successo e -1 per un errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{ENOTDIR}] Non si è specificata una directory. - \item[\macro{EACCESS}] Manca il permesso di ricerca su uno dei componenti di - \param{path}. + \item[\errcode{ENOTDIR}] Non si è specificata una directory. + \item[\errcode{EACCES}] Manca il permesso di ricerca su uno dei componenti + di \param{path}. \end{errlist} - ed inoltre \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, - \macro{ENOMEM}, \macro{ELOOP} e \macro{EIO}.} + ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT}, + \errval{ENOMEM}, \errval{ELOOP} e \errval{EIO}.} \end{prototype} \noindent ed ovviamente \param{pathname} deve indicare una directory per la quale si hanno i permessi di accesso. @@ -707,12 +711,12 @@ usa \func{fchdir}, il cui prototipo pathname. \bodydesc{La funzione restituisce zero in caso di successo e -1 per un - errore, in caso di errore \var{errno} assumerà i valori \macro{EBADF} o - \macro{EACCES}.} + errore, in caso di errore \var{errno} assumerà i valori \errval{EBADF} o + \errval{EACCES}.} \end{prototype} \noindent anche in questo caso \param{fd} deve essere un file descriptor valido che fa riferimento ad una directory. Inoltre l'unico errore di accesso -possibile (tutti gli altri sarebbero occorsi all'apertura di \func{fd}), è +possibile (tutti gli altri sarebbero occorsi all'apertura di \param{fd}), è quello in cui il processo non ha il permesso di accesso alla directory specificata da \param{fd}. @@ -736,19 +740,19 @@ di queste funzioni non esistente al momento dell'invocazione. \bodydesc{La funzione ritorna il puntatore alla stringa con il nome o - \macro{NULL} in caso di fallimento. Non sono definiti errori.} + \val{NULL} in caso di fallimento. Non sono definiti errori.} \end{prototype} \noindent se si è passato un puntatore \param{string} non nullo questo deve -essere di dimensione \macro{L\_tmpnam} (costante definita in \file{stdio.h}, -come \macro{P\_tmpdir} e \macro{TMP\_MAX}) ed il nome generato vi verrà +essere di dimensione \const{L\_tmpnam} (costante definita in \file{stdio.h}, +come \const{P\_tmpdir} e \const{TMP\_MAX}) ed il nome generato vi verrà copiato automaticamente; altrimenti il nome sarà generato in un buffer statico interno che verrà sovrascritto ad una chiamata successiva. Successive invocazioni della funzione continueranno a restituire nomi unici fino ad un -massimo di \macro{TMP\_MAX} volte. Al nome viene automaticamente aggiunto come -prefisso la directory specificata da \macro{P\_tmpdir}. +massimo di \const{TMP\_MAX} volte. Al nome viene automaticamente aggiunto come +prefisso la directory specificata da \const{P\_tmpdir}. Di questa funzione esiste una versione rientrante, \func{tmpnam\_r}, che non -fa nulla quando si passa \macro{NULL} come parametro. Una funzione simile, +fa nulla quando si passa \val{NULL} come parametro. Una funzione simile, \func{tempnam}, permette di specificare un prefisso per il file esplicitamente, il suo prototipo è: \begin{prototype}{stdio.h}{char *tempnam(const char *dir, const char *pfx)} @@ -756,8 +760,8 @@ esplicitamente, il suo prototipo non esistente al momento dell'invocazione. \bodydesc{La funzione ritorna il puntatore alla stringa con il nome o - \macro{NULL} in caso di fallimento, \var{errno} viene impostata a - \macro{ENOMEM} qualora fallisca l'allocazione della stringa.} + \val{NULL} in caso di fallimento, \var{errno} viene impostata a + \errval{ENOMEM} qualora fallisca l'allocazione della stringa.} \end{prototype} La funzione alloca con \code{malloc} la stringa in cui restituisce il nome, @@ -767,11 +771,11 @@ massimo 5 caratteri per il nome provvisorio. La funzione assegna come directory per il file temporaneo (verificando che esista e sia accessibili), la prima valida delle seguenti: \begin{itemize*} -\item La variabile di ambiente \macro{TMPNAME} (non ha effetto se non è +\item La variabile di ambiente \const{TMPNAME} (non ha effetto se non è definita o se il programma chiamante è \acr{suid} o \acr{sgid}, vedi \secref{sec:file_suid_sgid}). -\item il valore dell'argomento \param{dir} (se diverso da \macro{NULL}). -\item Il valore della costante \macro{P\_tmpdir}. +\item il valore dell'argomento \param{dir} (se diverso da \val{NULL}). +\item Il valore della costante \const{P\_tmpdir}. \item la directory \file{/tmp}. \end{itemize*} @@ -780,7 +784,7 @@ ottenere un nome duplicato, nulla assicura che un altro processo non possa avere creato, fra l'ottenimento del nome e l'apertura del file, un altro file con lo stesso nome; per questo motivo quando si usa il nome ottenuto da una di queste funzioni occorre sempre aprire il nuovo file in modalità di esclusione -(cioè con l'opzione \macro{O\_EXCL} per i file descriptor o con il flag +(cioè con l'opzione \const{O\_EXCL} per i file descriptor o con il flag \code{x} per gli stream) che fa fallire l'apertura in caso il file sia già esistente. @@ -790,20 +794,20 @@ POSIX definisce la funzione \func{tempfile}, il cui prototipo Restituisce un file temporaneo aperto in lettura/scrittura. \bodydesc{La funzione ritorna il puntatore allo stream associato al file - temporaneo in caso di successo e \macro{NULL} in caso di errore, nel qual + temporaneo in caso di successo e \val{NULL} in caso di errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EINTR}] La funzione è stata interrotta da un segnale. - \item[\macro{EEXIST}] Non è stato possibile generare un nome univoco. + \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale. + \item[\errcode{EEXIST}] Non è stato possibile generare un nome univoco. \end{errlist} - ed inoltre \macro{EFAULT}, \macro{EMFILE}, \macro{ENFILE}, \macro{ENOSPC}, - \macro{EROFS} e \macro{EACCESS}.} + ed inoltre \errval{EFAULT}, \errval{EMFILE}, \errval{ENFILE}, + \errval{ENOSPC}, \errval{EROFS} e \errval{EACCES}.} \end{prototype} \noindent essa restituisce direttamente uno stream già aperto (in modalità \code{r+b}, si veda \secref{sec:file_fopen}) e pronto per l'uso, che viene automaticamente cancellato alla sua chiusura o all'uscita dal programma. Lo standard non specifica in quale directory verrà aperto il file, ma le -\acr{glibc} prima tentano con \macro{P\_tmpdir} e poi con \file{/tmp}. Questa +\acr{glibc} prima tentano con \const{P\_tmpdir} e poi con \file{/tmp}. Questa funzione è rientrante e non soffre di problemi di \textit{race condition}\index{race condition}. @@ -818,10 +822,10 @@ il suo prototipo \param{template}. \bodydesc{La funzione ritorna il puntatore \param{template} in caso di - successo e \macro{NULL} in caso di errore, nel qual caso \var{errno} + successo e \val{NULL} in caso di errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EINVAL}] \param{template} non termina con \code{XXXXXX}. + \item[\errcode{EINVAL}] \param{template} non termina con \code{XXXXXX}. \end{errlist}} \end{prototype} \noindent dato che \param{template} deve poter essere modificata dalla @@ -846,14 +850,14 @@ prototipo \bodydesc{La funzione ritorna il file descriptor in caso successo e -1 in caso di errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EINVAL}] \param{template} non termina con \code{XXXXXX}. - \item[\macro{EEXIST}] non è riuscita a creare un file temporano, il + \item[\errcode{EINVAL}] \param{template} non termina con \code{XXXXXX}. + \item[\errcode{EEXIST}] non è riuscita a creare un file temporano, il contenuto di \param{template} è indefinito. \end{errlist}} \end{prototype} \noindent come per \func{mktemp} anche in questo caso \param{template} non può essere una stringa costante. La funzione apre un file in lettura/scrittura con -la funzione \func{open}, usando l'opzione \macro{O\_EXCL} (si veda +la funzione \func{open}, usando l'opzione \const{O\_EXCL} (si veda \secref{sec:file_open}), in questo modo al ritorno della funzione si ha la certezza di essere i soli utenti del file. I permessi sono impostati al valore \code{0600}\footnote{questo è vero a partire dalle \acr{glibc} 2.0.7, le @@ -869,10 +873,10 @@ In OpenBSD \code{XXXXXX} finali di \param{template}. \bodydesc{La funzione ritorna il puntatore al nome della directory in caso - successo e \macro{NULL} in caso di errore, nel qual caso \var{errno} + successo e \val{NULL} in caso di errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EINVAL}] \param{template} non termina con \code{XXXXXX}. + \item[\errcode{EINVAL}] \param{template} non termina con \code{XXXXXX}. \end{errlist} più gli altri eventuali codici di errore di \func{mkdir}.} \end{prototype} @@ -921,9 +925,9 @@ queste funzioni sono i seguenti: descriptor \var{filedes}. \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 per un - errore, nel qual caso \var{errno} assumerà uno dei valori: \macro{EBADF}, - \macro{ENOENT}, \macro{ENOTDIR}, \macro{ELOOP}, \macro{EFAULT}, - \macro{EACCESS}, \macro{ENOMEM}, \macro{ENAMETOOLONG}.} + errore, nel qual caso \var{errno} assumerà uno dei valori: \errval{EBADF}, + \errval{ENOENT}, \errval{ENOTDIR}, \errval{ELOOP}, \errval{EFAULT}, + \errval{EACCES}, \errval{ENOMEM}, \errval{ENAMETOOLONG}.} \end{functions} \noindent il loro comportamento è identico, solo che operano rispettivamente su un file, su un link simbolico e su un file descriptor. @@ -1023,33 +1027,33 @@ un'opportuna combinazione. \textbf{Flag} & \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \macro{S\_IFMT} & 0170000 & bitmask per i bit del tipo di file \\ - \macro{S\_IFSOCK} & 0140000 & socket \\ - \macro{S\_IFLNK} & 0120000 & link simbolico \\ - \macro{S\_IFREG} & 0100000 & file regolare \\ - \macro{S\_IFBLK} & 0060000 & device a blocchi \\ - \macro{S\_IFDIR} & 0040000 & directory \\ - \macro{S\_IFCHR} & 0020000 & device a caratteri \\ - \macro{S\_IFIFO} & 0010000 & fifo \\ + \const{S\_IFMT} & 0170000 & bitmask per i bit del tipo di file \\ + \const{S\_IFSOCK} & 0140000 & socket \\ + \const{S\_IFLNK} & 0120000 & link simbolico \\ + \const{S\_IFREG} & 0100000 & file regolare \\ + \const{S\_IFBLK} & 0060000 & device a blocchi \\ + \const{S\_IFDIR} & 0040000 & directory \\ + \const{S\_IFCHR} & 0020000 & device a caratteri \\ + \const{S\_IFIFO} & 0010000 & fifo \\ \hline - \macro{S\_ISUID} & 0004000 & set UID bit \\ - \macro{S\_ISGID} & 0002000 & set GID bit \\ - \macro{S\_ISVTX} & 0001000 & sticky bit \\ + \const{S\_ISUID} & 0004000 & set UID bit \\ + \const{S\_ISGID} & 0002000 & set GID bit \\ + \const{S\_ISVTX} & 0001000 & sticky bit \\ \hline -% \macro{S\_IRWXU} & 00700 & bitmask per i permessi del proprietario \\ - \macro{S\_IRUSR} & 00400 & il proprietario ha permesso di lettura \\ - \macro{S\_IWUSR} & 00200 & il proprietario ha permesso di scrittura \\ - \macro{S\_IXUSR} & 00100 & il proprietario ha permesso di esecuzione\\ +% \const{S\_IRWXU} & 00700 & bitmask per i permessi del proprietario \\ + \const{S\_IRUSR} & 00400 & il proprietario ha permesso di lettura \\ + \const{S\_IWUSR} & 00200 & il proprietario ha permesso di scrittura \\ + \const{S\_IXUSR} & 00100 & il proprietario ha permesso di esecuzione\\ \hline -% \macro{S\_IRWXG} & 00070 & bitmask per i permessi del gruppo \\ - \macro{S\_IRGRP} & 00040 & il gruppo ha permesso di lettura \\ - \macro{S\_IWGRP} & 00020 & il gruppo ha permesso di scrittura \\ - \macro{S\_IXGRP} & 00010 & il gruppo ha permesso di esecuzione \\ +% \const{S\_IRWXG} & 00070 & bitmask per i permessi del gruppo \\ + \const{S\_IRGRP} & 00040 & il gruppo ha permesso di lettura \\ + \const{S\_IWGRP} & 00020 & il gruppo ha permesso di scrittura \\ + \const{S\_IXGRP} & 00010 & il gruppo ha permesso di esecuzione \\ \hline -% \macro{S\_IRWXO} & 00007 & bitmask per i permessi di tutti gli altri\\ - \macro{S\_IROTH} & 00004 & gli altri hanno permesso di lettura \\ - \macro{S\_IWOTH} & 00002 & gli altri hanno permesso di esecuzione \\ - \macro{S\_IXOTH} & 00001 & gli altri hanno permesso di esecuzione \\ +% \const{S\_IRWXO} & 00007 & bitmask per i permessi di tutti gli altri\\ + \const{S\_IROTH} & 00004 & gli altri hanno permesso di lettura \\ + \const{S\_IWOTH} & 00002 & gli altri hanno permesso di esecuzione \\ + \const{S\_IXOTH} & 00001 & gli altri hanno permesso di esecuzione \\ \hline \end{tabular} \caption{Costanti per l'identificazione dei vari bit che compongono il campo @@ -1100,7 +1104,7 @@ cui si pu presenti al di là della dimensione scelta come nuova fine del file. Un file può sempre essere troncato a zero aprendolo con il flag -\macro{O\_TRUNC}, ma questo è un caso particolare; per qualunque altra +\const{O\_TRUNC}, ma questo è un caso particolare; per qualunque altra dimensione si possono usare le due funzioni \func{truncate} e \func{ftruncate}, i cui prototipi sono: \begin{functions} @@ -1116,18 +1120,18 @@ dimensione si possono usare le due funzioni \func{truncate} e errore, nel qual caso \var{errno} viene impostata opportunamente; per \func{ftruncate} si hanno i valori: \begin{errlist} - \item[\macro{EBADF}] \var{fd} non è un file descriptor. - \item[\macro{EINVAL}] \var{fd} è un riferimento ad un socket, non a un file + \item[\errcode{EBADF}] \var{fd} non è un file descriptor. + \item[\errcode{EINVAL}] \var{fd} è un riferimento ad un socket, non a un file o non è aperto in scrittura. \end{errlist} per \func{truncate} si hanno: \begin{errlist} - \item[\macro{EACCES}] il file non ha permesso di scrittura o non si ha il + \item[\errcode{EACCES}] il file non ha permesso di scrittura o non si ha il permesso di esecuzione una delle directory del pathname. - \item[\macro{ETXTBSY}] Il file è un programma in esecuzione. + \item[\errcode{ETXTBSY}] Il file è un programma in esecuzione. \end{errlist} - ed anche \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT}, - \macro{EROFS}, \macro{EIO}, \macro{EFAULT}, \macro{ELOOP}.} + ed anche \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT}, + \errval{EROFS}, \errval{EIO}, \errval{EFAULT}, \errval{ELOOP}.} \end{functions} Se il file è più lungo della lunghezza specificata i dati in eccesso saranno @@ -1220,9 +1224,9 @@ nell'ultima colonna di \tabref{tab:file_file_times}. & & &$\bullet$& & & & \\ \func{creat} &$\bullet$&$\bullet$&$\bullet$& &$\bullet$&$\bullet$& con - \macro{O\_CREATE} \\ \func{creat} + \const{O\_CREATE} \\ \func{creat} & &$\bullet$&$\bullet$& &$\bullet$&$\bullet$& - con \macro{O\_TRUNC} \\ \func{exec} + con \const{O\_TRUNC} \\ \func{exec} &$\bullet$& & & & & & \\ \func{lchown} & & &$\bullet$& & & & \\ @@ -1234,9 +1238,9 @@ nell'ultima colonna di \tabref{tab:file_file_times}. &$\bullet$&$\bullet$&$\bullet$& &$\bullet$&$\bullet$& \\ \func{open} &$\bullet$&$\bullet$&$\bullet$& &$\bullet$&$\bullet$& con - \macro{O\_CREATE} \\ \func{open} + \const{O\_CREATE} \\ \func{open} & &$\bullet$&$\bullet$& & & & con - \macro{O\_TRUNC} \\ \func{pipe} + \const{O\_TRUNC} \\ \func{pipe} &$\bullet$&$\bullet$&$\bullet$& & & & \\ \func{read} &$\bullet$& & & & & & \\ @@ -1295,13 +1299,13 @@ funzione \func{utime}, il cui prototipo Cambia i tempi di ultimo accesso e modifica dell'inode specificato da \param{filename} secondo i campi \var{actime} e \var{modtime} di -\param{times}. Se questa è \macro{NULL} allora viene usato il tempo corrente. +\param{times}. Se questa è \val{NULL} allora viene usato il tempo corrente. \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\macro{EACCESS}] non si ha il permesso di scrittura sul file. - \item[\macro{ENOENT}] \param{filename} non esiste. + \item[\errcode{EACCES}] non si ha il permesso di scrittura sul file. + \item[\errcode{ENOENT}] \param{filename} non esiste. \end{errlist}} \end{prototype} @@ -1326,7 +1330,7 @@ struct utimbuf { \end{figure} L'effetto della funzione e i privilegi necessari per eseguirla dipendono da -cosa è l'argomento \param{times}; se è \macro{NULL} la funzione imposta il +cosa è l'argomento \param{times}; se è \val{NULL} la funzione imposta il tempo corrente ed è sufficiente avere accesso in scrittura al file; se invece si è specificato un valore la funzione avrà successo solo se si è proprietari del file (o si hanno i privilegi di amministratore). @@ -1435,17 +1439,17 @@ che permettono di accedere al valore numerico di questi bit nel campo \textbf{\var{st\_mode}} bit & \textbf{Significato} \\ \hline \hline - \macro{S\_IRUSR} & \textit{user-read}, l'utente può leggere \\ - \macro{S\_IWUSR} & \textit{user-write}, l'utente può scrivere \\ - \macro{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire \\ + \const{S\_IRUSR} & \textit{user-read}, l'utente può leggere \\ + \const{S\_IWUSR} & \textit{user-write}, l'utente può scrivere \\ + \const{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire \\ \hline - \macro{S\_IRGRP} & \textit{group-read}, il gruppo può leggere \\ - \macro{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere \\ - \macro{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire\\ + \const{S\_IRGRP} & \textit{group-read}, il gruppo può leggere \\ + \const{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere \\ + \const{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire\\ \hline - \macro{S\_IROTH} & \textit{other-read}, tutti possono leggere \\ - \macro{S\_IWOTH} & \textit{other-write}, tutti possono scrivere \\ - \macro{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire\\ + \const{S\_IROTH} & \textit{other-read}, tutti possono leggere \\ + \const{S\_IWOTH} & \textit{other-write}, tutti possono scrivere \\ + \const{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire\\ \hline \end{tabular} \caption{I bit dei permessi di accesso ai file, come definiti in @@ -1562,7 +1566,7 @@ accesso oltre ai bit dei permessi veri e propri, ci sono altri tre bit che vengono usati per indicare alcune proprietà speciali dei file. Due di questi sono i bit detti \acr{suid} (da \textit{set-user-ID bit}) e \acr{sgid} (da \textit{set-group-ID bit}) che sono identificati dalle costanti -\macro{S\_ISUID} e \macro{S\_ISGID}. +\const{S\_ISUID} e \const{S\_ISGID}. Come spiegato in dettaglio in \secref{sec:proc_exec}, quando si lancia un programma il comportamento normale del kernel è quello di impostare gli @@ -1598,7 +1602,7 @@ il comando \cmd{ls -l}, che visualizza una lettera \cmd{s} al posto della \cmd{x} in corrispondenza dei permessi di utente o gruppo. La stessa lettera \cmd{s} può essere usata nel comando \cmd{chmod} per impostare questi bit. Infine questi bit possono essere controllati all'interno di \var{st\_mode} con -l'uso delle due costanti \macro{S\_ISUID} e \macro{S\_IGID}, i cui valori sono +l'uso delle due costanti \const{S\_ISUID} e \const{S\_IGID}, i cui valori sono riportati in \tabref{tab:file_mode_flags}. Gli stessi bit vengono ad assumere in significato completamente diverso per le @@ -1617,7 +1621,7 @@ dettaglio pi \subsection{Il bit \textsl{sticky}} \label{sec:file_sticky} -L'ultimo dei bit rimanenti, identificato dalla costante \macro{S\_ISVTX}, è in +L'ultimo dei bit rimanenti, identificato dalla costante \const{S\_ISVTX}, è in parte un rimasuglio delle origini dei sistemi Unix. A quell'epoca infatti la memoria virtuale e l'accesso ai files erano molto meno sofisticati e per ottenere la massima velocità possibile per i programmi usati più comunemente @@ -1719,21 +1723,21 @@ da \param{pathname}. è consentito ed in caso di errore; nel qual caso la variabile \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EINVAL}] il valore di \param{mode} non è valido. - \item[\macro{EACCES}] l'accesso al file non è consentito, o non si ha il + \item[\errcode{EINVAL}] il valore di \param{mode} non è valido. + \item[\errcode{EACCES}] l'accesso al file non è consentito, o non si ha il permesso di attraversare una delle directory di \param{pathname}. - \item[\macro{EROFS}] si è richiesto l'accesso in scrittura per un file su un - filesystem montato in sola lettura. + \item[\errcode{EROFS}] si è richiesto l'accesso in scrittura per un file su + un filesystem montato in sola lettura. \end{errlist} - ed inoltre \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, - \macro{ENOTDIR}, \macro{ELOOP}, \macro{EIO}.} + ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT}, + \errval{ENOTDIR}, \errval{ELOOP}, \errval{EIO}.} \end{prototype} I valori possibili per l'argomento \param{mode} sono esprimibili come combinazione delle costanti numeriche riportate in \tabref{tab:file_access_mode_val} (attraverso un OR binario delle stesse). I primi tre valori implicano anche la verifica dell'esistenza del file, se si -vuole verificare solo quest'ultima si può usare \macro{F\_OK}, o anche +vuole verificare solo quest'ultima si può usare \const{F\_OK}, o anche direttamente \func{stat}. Nel caso in cui \var{pathname} si riferisca ad un link simbolico, questo viene seguito ed il controllo è fatto sul file a cui esso fa riferimento. @@ -1752,10 +1756,10 @@ contrario (o di errore) ritorna -1. \textbf{\var{mode}} & \textbf{Significato} \\ \hline \hline - \macro{R\_OK} & verifica il permesso di lettura \\ - \macro{W\_OK} & verifica il permesso di scritture \\ - \macro{X\_OK} & verifica il permesso di esecuzione \\ - \macro{F\_OK} & verifica l'esistenza del file \\ + \const{R\_OK} & verifica il permesso di lettura \\ + \const{W\_OK} & verifica il permesso di scritture \\ + \const{X\_OK} & verifica il permesso di esecuzione \\ + \const{F\_OK} & verifica l'esistenza del file \\ \hline \end{tabular} \caption{Valori possibile per il parametro \var{mode} della funzione @@ -1788,13 +1792,13 @@ filename e su un file descriptor, i loro prototipi sono: \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per un errore, in caso di errore \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{EPERM}] L'userid effettivo non corrisponde a quello del + \item[\errcode{EPERM}] L'userid effettivo non corrisponde a quello del proprietario del file o non è zero. - \item[\macro{EROFS}] Il file è su un filesystem in sola lettura. + \item[\errcode{EROFS}] Il file è su un filesystem in sola lettura. \end{errlist} - ed inoltre \macro{EIO}; \func{chmod} restituisce anche \macro{EFAULT}, - \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR}, - \macro{EACCES}, \macro{ELOOP}; \func{fchmod} anche \macro{EBADF}.} + ed inoltre \errval{EIO}; \func{chmod} restituisce anche \errval{EFAULT}, + \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM}, \errval{ENOTDIR}, + \errval{EACCES}, \errval{ELOOP}; \func{fchmod} anche \errval{EBADF}.} \end{functions} Entrambe le funzioni utilizzano come secondo argomento \param{mode}, una @@ -1810,24 +1814,24 @@ file. \textbf{\var{mode}} & \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \macro{S\_ISUID} & 04000 & set user ID \\ - \macro{S\_ISGID} & 02000 & set group ID \\ - \macro{S\_ISVTX} & 01000 & sticky bit \\ + \const{S\_ISUID} & 04000 & set user ID \\ + \const{S\_ISGID} & 02000 & set group ID \\ + \const{S\_ISVTX} & 01000 & sticky bit \\ \hline - \macro{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\ - \macro{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura \\ - \macro{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\ - \macro{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\ + \const{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\ + \const{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura \\ + \const{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\ + \const{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\ \hline - \macro{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi \\ - \macro{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura \\ - \macro{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\ - \macro{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\ + \const{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi \\ + \const{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura \\ + \const{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\ + \const{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\ \hline - \macro{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\ - \macro{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura \\ - \macro{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\ - \macro{S\_IXOTH} & 00001 & gli altri hanno il permesso di esecuzione \\ + \const{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\ + \const{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura \\ + \const{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\ + \const{S\_IXOTH} & 00001 & gli altri hanno il permesso di esecuzione \\ \hline \end{tabular} \caption{Valori delle costanti usate per indicare i vari bit di @@ -1853,7 +1857,7 @@ Il cambiamento dei permessi di un file eseguito attraverso queste funzioni ha comunque alcune limitazioni, previste per motivi di sicurezza. L'uso delle funzioni infatti è possibile solo se l'userid effettivo del processo corrisponde a quello del proprietario del file o dell'amministratore, -altrimenti esse falliranno con un errore di \macro{EPERM}. +altrimenti esse falliranno con un errore di \errcode{EPERM}. Ma oltre a questa regola generale, di immediata comprensione, esistono delle limitazioni ulteriori. Per questo motivo, anche se si è proprietari del file, @@ -1942,13 +1946,13 @@ sono tre e i loro prototipi sono i seguenti: \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per un errore, in caso di errore \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{EPERM}] L'userid effettivo non corrisponde a quello del + \item[\errcode{EPERM}] L'userid effettivo non corrisponde a quello del proprietario del file o non è zero, o utente e gruppo non sono validi \end{errlist} - Oltre a questi entrambe restituiscono gli errori \macro{EROFS} e - \macro{EIO}; \func{chown} restituisce anche \macro{EFAULT}, - \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR}, - \macro{EACCES}, \macro{ELOOP}; \func{fchown} anche \macro{EBADF}.} + Oltre a questi entrambe restituiscono gli errori \errval{EROFS} e + \errval{EIO}; \func{chown} restituisce anche \errval{EFAULT}, + \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM}, \errval{ENOTDIR}, + \errval{EACCES}, \errval{ELOOP}; \func{fchown} anche \errval{EBADF}.} \end{functions} In Linux soltanto l'amministratore può cambiare il proprietario di un file, @@ -2104,11 +2108,11 @@ radice con la funzione \func{chroot}, il cui prototipo \bodydesc{La funzione restituisce zero in caso di successo e -1 per un errore, in caso di errore \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{EPERM}] L'userid effettivo del processo non è zero. + \item[\errcode{EPERM}] L'userid effettivo del processo non è zero. \end{errlist} - ed inoltre \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, - \macro{ENOMEM}, \macro{ENOTDIR}, \macro{EACCES}, \macro{ELOOP}; - \macro{EROFS} e \macro{EIO}.} + ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT}, + \errval{ENOMEM}, \errval{ENOTDIR}, \errval{EACCES}, \errval{ELOOP}; + \errval{EROFS} e \errval{EIO}.} \end{prototype} \noindent in questo modo la directory radice del processo diventerà \param{path} (che ovviamente deve esistere) ed ogni pathname assoluto sarà