X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=3a16dddbd77f226272fdc225c0713450c7944e0a;hp=50c300892ba545cb72d3f394614781abb40bb680;hb=dcf2c2df897955ff3503a7c426025457ab456fd7;hpb=08c289c4acd775aabeb5beeb7b08566969e11d9b diff --git a/fileunix.tex b/fileunix.tex index 50c3008..3a16ddd 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -1,6 +1,6 @@ %% fileunix.tex %% -%% Copyright (C) 2000-2011 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2012 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -77,19 +77,19 @@ quest'ultima tabella. La \itindex{file~table} \textit{file table} è una tabella che contiene una voce per ciascun file che è stato aperto nel sistema. In Linux è costituita da -strutture di tipo \struct{file}; in ciascuna di esse sono tenute varie -informazioni relative al file, fra cui: +puntatori alle strutture di tipo \kstruct{file} di fig.~\ref{fig:kstruct_file} +che come illustrano mantengono varie informazioni relative al file, fra cui: \begin{itemize*} \item lo stato del file (nel campo \var{f\_flags}). \item il valore della posizione corrente (l'\textit{offset}) nel file (nel campo \var{f\_pos}). \item un puntatore \itindex{inode} all'inode\footnote{nel kernel 2.4.x si è in - realtà passati ad un puntatore ad una struttura \struct{dentry} che punta - a sua volta \itindex{inode} all'inode passando per la nuova struttura del - VFS.} del file. -%\item un puntatore alla tabella delle funzioni \footnote{la struttura -% \var{f\_op} descritta in sez.~\ref{sec:file_vfs_work}} che si possono usare -% sul file. + realtà passati ad un puntatore ad una struttura \kstruct{dentry} che punta + a sua volta \itindex{inode} all'\textit{inode} passando per la nuova + struttura del VFS.} del file. +\item un puntatore \var{f\_op} alla tabella delle funzioni \footnote{quelle + della struttura \kstruct{file\_operation}, descritte in + tab.~\ref{tab:file_file_operations}.} che si possono usare sul file. \end{itemize*} In fig.~\ref{fig:file_proc_file} si è riportato uno schema in cui è illustrata @@ -152,7 +152,7 @@ tab.~\ref{tab:file_std_files}. error}\\ \hline \end{tabular} - \caption{Costanti definite in \file{unistd.h} per i file standard aperti + \caption{Costanti definite in \headfile{unistd.h} per i file standard aperti alla creazione di ogni processo.} \label{tab:file_std_files} \end{table} @@ -189,8 +189,8 @@ usando direttamente le system call del kernel. \label{sec:file_open} La funzione \funcd{open} è la funzione fondamentale per accedere ai file, ed è -quella che crea l'associazione fra un \itindex{pathname} \textit{pathname} ed -un \itindex{file~descriptor} file descriptor, il suo prototipo è: +quella che crea l'associazione fra un \textit{pathname} ed un +\itindex{file~descriptor} file descriptor, il suo prototipo è: \begin{functions} \headdecl{sys/types.h} \headdecl{sys/stat.h} @@ -230,7 +230,7 @@ un \itindex{file~descriptor} file descriptor, il suo prototipo è: La funzione apre il file usando il primo file descriptor libero, e crea -l'opportuna voce, cioè la struttura \struct{file}, nella \itindex{file~table} +l'opportuna voce, cioè la struttura \kstruct{file}, nella \itindex{file~table} \textit{file table} del processo. Viene sempre restituito come valore di ritorno il file descriptor con il valore più basso disponibile. @@ -412,7 +412,7 @@ sez.~\ref{sec:file_perm_management}) per il processo. La funzione prevede diverse opzioni, che vengono specificate usando vari bit dell'argomento \param{flags}. Alcuni di questi bit vanno anche a costituire il flag di stato del file (o \textit{file status flag}), che è mantenuto nel -campo \var{f\_flags} della struttura \struct{file} (al solito si veda lo schema +campo \var{f\_flags} della struttura \kstruct{file} (al solito si veda lo schema di fig.~\ref{fig:file_proc_file}). Essi sono divisi in tre categorie principali: \begin{itemize*} @@ -507,7 +507,7 @@ di ripetere tre volte il comando prima di eseguire lo shutdown). Come già accennato in sez.~\ref{sec:file_fd} a ciascun file aperto è associata una \textsl{posizione corrente nel file} (il cosiddetto \textit{file offset}, -mantenuto nel campo \var{f\_pos} di \struct{file}) espressa da un numero intero +mantenuto nel campo \var{f\_pos} di \kstruct{file}) espressa da un numero intero positivo come numero di byte dall'inizio del file. Tutte le operazioni di lettura e scrittura avvengono a partire da questa posizione che viene automaticamente spostata in avanti del numero di byte letti o scritti. @@ -725,10 +725,10 @@ posizione \param{offset}, nel buffer \param{buf}. \end{prototype} La funzione prende esattamente gli stessi argomenti di \func{read} con lo -stesso significato, a cui si aggiunge l'argomento \func{offset} che indica una -posizione sul file. Identico è il comportamento ed il valore di ritorno. La -funzione serve quando si vogliono leggere dati dal file senza modificare la -posizione corrente. +stesso significato, a cui si aggiunge l'argomento \param{offset} che indica +una posizione sul file. Identico è il comportamento ed il valore di +ritorno. La funzione serve quando si vogliono leggere dati dal file senza +modificare la posizione corrente. L'uso di \func{pread} è equivalente all'esecuzione di una \func{read} seguita da una \func{lseek} che riporti al valore precedente la posizione corrente sul @@ -744,7 +744,7 @@ accessibile solo attivando il supporto delle estensioni previste dalle #define _XOPEN_SOURCE 500 \end{verbatim} e si ricordi di definire questa macro prima dell'inclusione del file di -dichiarazioni \file{unistd.h}. +dichiarazioni \headfile{unistd.h}. @@ -841,7 +841,7 @@ Il primo caso è quello in cui due processi diversi aprono lo stesso file su disco; sulla base di quanto visto in sez.~\ref{sec:file_fd} avremo una situazione come quella illustrata in fig.~\ref{fig:file_mult_acc}: ciascun processo avrà una sua voce nella \textit{file table} referenziata da un -diverso file descriptor nella sua \struct{file\_struct}. Entrambe le voci +diverso file descriptor nella sua \kstruct{file\_struct}. Entrambe le voci nella \itindex{file~table} \textit{file table} faranno però riferimento allo stesso \itindex{inode} inode su disco. @@ -862,7 +862,7 @@ che: prima impostata alla dimensione corrente del file letta \itindex{inode} dall'inode. Dopo la scrittura il file viene automaticamente esteso. \item l'effetto di \func{lseek} è solo quello di cambiare il campo - \var{f\_pos} nella struttura \struct{file} della \itindex{file~table} + \var{f\_pos} nella struttura \kstruct{file} della \itindex{file~table} \textit{file table}, non c'è nessuna operazione sul file su disco. Quando la si usa per porsi alla fine del file la posizione viene impostata leggendo la dimensione corrente \itindex{inode} dall'inode. @@ -882,7 +882,7 @@ figlio all'esecuzione di una \func{fork} (si ricordi quanto detto in sez.~\ref{sec:proc_fork}). La situazione è illustrata in fig.~\ref{fig:file_acc_child}; dato che il processo figlio riceve una copia dello spazio di indirizzi del padre, riceverà anche una copia di -\struct{file\_struct} e relativa tabella dei file aperti. +\kstruct{file\_struct} e relativa tabella dei file aperti. In questo modo padre e figlio avranno gli stessi file descriptor che faranno riferimento alla stessa voce nella \textit{file table}, condividendo così la @@ -894,10 +894,10 @@ corrente nel file varierà per entrambi i processi (in quanto verrà modificato Si noti inoltre che anche i flag di stato del file (quelli impostati dall'argomento \param{flag} di \func{open}) essendo tenuti nella voce della \textit{file table}\footnote{per la precisione nel campo \var{f\_flags} di - \struct{file}.}, vengono in questo caso condivisi. Ai file però sono + \kstruct{file}.}, vengono in questo caso condivisi. Ai file però sono associati anche altri flag, dei quali l'unico usato al momento è \const{FD\_CLOEXEC}, detti \textit{file descriptor flags}. Questi ultimi sono -tenuti invece in \struct{file\_struct}, e perciò sono specifici di ciascun +tenuti invece in \kstruct{file\_struct}, e perciò sono specifici di ciascun processo e non vengono modificati dalle azioni degli altri anche in caso di condivisione della stessa voce della \textit{file table}. @@ -1055,7 +1055,7 @@ file descriptor è una copia esatta del precedente ed entrambi possono essere interscambiati nell'uso. Per capire meglio il funzionamento della funzione si può fare riferimento a fig.~\ref{fig:file_dup}: l'effetto della funzione è semplicemente quello di copiare il valore nella struttura -\struct{file\_struct}, cosicché anche il nuovo file descriptor fa riferimento +\kstruct{file\_struct}, cosicché anche il nuovo file descriptor fa riferimento alla stessa voce nella \textit{file table}; per questo si dice che il nuovo file descriptor è \textsl{duplicato}, da cui il nome della funzione. @@ -1127,30 +1127,33 @@ file descriptor libero di valore uguale o maggiore di \param{newfd} (e se \label{sec:file_openat} Un problema che si pone con l'uso della funzione \func{open}, così come per -molte altre funzioni che accettano come argomenti dei pathname relativi, è -che, quando un pathname relativo non fa riferimento alla directory di lavoro -corrente, è possibile che alcuni dei suoi componenti vengano modificati in -parallelo alla chiamata a \func{open}, e questo lascia aperta la possibilità -di una \itindex{race~condition} \textit{race condition}. - -Inoltre come già accennato, la directory di lavoro corrente è una proprietà -del singolo processo; questo significa che quando si lavora con i -\itindex{thread} \textit{thread} essa sarà la stessa per tutti, ma esistono -molti casi in cui sarebbe invece utile che ogni singolo \itindex{thread} -\textit{thread} avesse la sua directory di lavoro. +molte altre funzioni che accettano come argomenti dei +\itindsub{pathname}{relativo} \textit{pathname} relativi, è che, quando un +\textit{pathname} relativo non fa riferimento alla \index{directory~di~lavoro} +directory di lavoro corrente, è possibile che alcuni dei suoi componenti +vengano modificati in parallelo alla chiamata a \func{open}, e questo lascia +aperta la possibilità di una \itindex{race~condition} \textit{race condition}. + +Inoltre come già accennato, la \index{directory~di~lavoro} directory di lavoro +corrente è una proprietà del singolo processo; questo significa che quando si +lavora con i \itindex{thread} \textit{thread} essa sarà la stessa per tutti, +ma esistono molti casi in cui sarebbe invece utile che ogni singolo +\itindex{thread} \textit{thread} avesse la sua \index{directory~di~lavoro} +directory di lavoro. Per risolvere questi problemi, riprendendo una interfaccia già presente in Solaris, a fianco delle normali funzioni che operano sui file (come \func{open}, \func{mkdir}, ecc.) sono state introdotte delle ulteriori funzioni, dette anche funzioni ``\textit{at}'' in quanto contraddistinte dal suffisso \texttt{at}, che permettono l'apertura di un file (o le rispettive -altre operazioni) usando un pathname relativo ad una directory -specificata.\footnote{l'introduzione è avvenuta su proposta dello sviluppatore - principale delle \acr{glibc} Urlich Drepper; le corrispondenti system call - sono state inserite nel kernel ufficiale a partire dalla versione 2.6.16, in - precedenza era disponibile una emulazione che, sia pure con prestazioni - inferiori, funzionava facendo ricorso all'uso del filesystem \textit{proc} - con l'apertura del file attraverso il riferimento a pathname del tipo di +altre operazioni) usando un \itindsub{pathname}{relativo} \textit{pathname} +relativo ad una directory specificata.\footnote{l'introduzione è avvenuta su + proposta dello sviluppatore principale delle \acr{glibc} Urlich Drepper; le + corrispondenti system call sono state inserite nel kernel ufficiale a + partire dalla versione 2.6.16, in precedenza era disponibile una emulazione + che, sia pure con prestazioni inferiori, funzionava facendo ricorso all'uso + del filesystem \textit{proc} con l'apertura del file attraverso il + riferimento a \textit{pathname} del tipo di \texttt{/proc/self/fd/dirfd/relative\_path}.} Benché queste funzioni non siano presenti negli standard tradizionali esse sono state adottate da vari Unix\footnote{oltre a Linux e Solaris sono presenti in vari BSD.} fino ad @@ -1159,20 +1162,22 @@ POSIX.1; con le \acr{glibc} per l'accesso a queste funzioni è necessario definire la macro \macro{\_ATFILE\_SOURCE}. L'uso di queste funzioni prevede una apertura iniziale della directory che -sarà la base della risoluzione dei pathname relativi che verranno usati in -seguito, dopo di che si dovrà passare il relativo file descriptor alle varie -funzioni che useranno quella directory come punto di partenza per la -risoluzione.\footnote{in questo modo, anche quando si lavora con i - \itindex{thread} \textit{thread}, si può mantenere una directory di lavoro - diversa per ciascuno di essi.} +sarà la base della risoluzione dei \itindsub{pathname}{relativo} +\textit{pathname} relativi che verranno usati in seguito, dopo di che si dovrà +passare il relativo file descriptor alle varie funzioni che useranno quella +directory come punto di partenza per la risoluzione.\footnote{in questo modo, + anche quando si lavora con i \itindex{thread} \textit{thread}, si può + mantenere una \index{directory~di~lavoro} directory di lavoro diversa per + ciascuno di essi.} Questo metodo, oltre a risolvere i problemi di \itindex{race~condition} \textit{race condition}, consente anche di ottenere aumenti di prestazioni significativi quando si devono eseguire molte operazioni su sezioni dell'albero dei file che prevedono delle gerarchie di sottodirectory molto -profonde; infatti in questo caso basta eseguire la risoluzione del pathname -della directory di partenza una sola volta (nell'apertura iniziale) e non -tutte le volte che si deve accedere a ciascun file che essa contiene. +profonde; infatti in questo caso basta eseguire la risoluzione del +\textit{pathname} della directory di partenza una sola volta (nell'apertura +iniziale) e non tutte le volte che si deve accedere a ciascun file che essa +contiene. La sintassi generale di queste nuove funzioni è che esse prevedono come primo argomento il file descriptor della directory da usare come base, mentre gli @@ -1185,36 +1190,42 @@ come: \funcdecl{int openat(int dirfd, const char *pathname, int flags, mode\_t mode))} - Apre un file usando come directory di lavoro corrente \param{dirfd}. + Apre un file usando come directory di \index{directory~di~lavoro} lavoro + corrente \param{dirfd}. \bodydesc{la funzione restituisce gli stessi valori e gli stessi codici di errore di \func{open}, ed in più: \begin{errlist} \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido. - \item[\errcode{ENOTDIR}] \param{pathname} è un pathname relativo, ma + \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo} + \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file. \end{errlist}} \end{functions} Il comportamento delle nuove funzioni è del tutto analogo a quello delle corrispettive classiche, con la sola eccezione del fatto che se fra i loro -argomenti si utilizza un pathname relativo questo sarà risolto rispetto alla -directory indicata da \param{dirfd}; qualora invece si usi un pathname -assoluto \param{dirfd} verrà semplicemente ignorato. Infine se per +argomenti si utilizza un \itindsub{pathname}{relativo} \textit{pathname} +relativo questo sarà risolto rispetto alla directory indicata +da \param{dirfd}; qualora invece si usi un \itindsub{pathname}{assoluto} +\textit{pathname} assoluto \param{dirfd} verrà semplicemente ignorato. Infine +se per \param{dirfd} si usa il valore speciale \const{AT\_FDCWD},\footnote{questa, - come le altre costanti \texttt{AT\_*}, è definita in \texttt{fcntl.h}, + come le altre costanti \texttt{AT\_*}, è definita in \headfile{fcntl.h}, pertanto se la si vuole usare occorrerà includere comunque questo file, anche per le funzioni che non sono definite in esso.} la risoluzione sarà -effettuata rispetto alla directory di lavoro corrente del processo. +effettuata rispetto alla directory di \index{directory~di~lavoro} lavoro +corrente del processo. Così come il comportamento, anche i valori di ritorno e le condizioni di errore delle nuove funzioni sono gli stessi delle funzioni classiche, agli errori si aggiungono però quelli dovuti a valori errati per \param{dirfd}; in particolare si avrà un errore di \errcode{EBADF} se esso non è un file -descriptor valido, ed un errore di \errcode{ENOTDIR} se esso non fa riferimento -ad una directory.\footnote{tranne il caso in cui si sia specificato un - pathname assoluto, nel qual caso, come detto, il valore di \param{dirfd} - sarà completamente ignorato.} +descriptor valido, ed un errore di \errcode{ENOTDIR} se esso non fa +riferimento ad una directory.\footnote{tranne il caso in cui si sia + specificato un \itindsub{pathname}{assoluto} \textit{pathname} assoluto, nel + qual caso, come detto, il valore di \param{dirfd} sarà completamente + ignorato.} In tab.~\ref{tab:file_atfunc_corr} si sono riportate le funzioni introdotte con questa nuova interfaccia, con a fianco la corrispondente funzione @@ -1243,14 +1254,14 @@ prevista anche l'aggiunta di un ulteriore argomento finale, \param{flags}. \func{fstatat} &$\bullet$&\func{stat},\func{lstat} \\ \func{utimensat} &$\bullet$&\func{utimes},\func{lutimes}\\ \func{linkat} &$\bullet$\footnotemark&\func{link} \\ - \func{mkdirat} & -- &\func{mkdir} \\ - \func{mknodat} & -- &\func{mknod} \\ + \funcm{mkdirat} & -- &\func{mkdir} \\ + \funcm{mknodat} & -- &\func{mknod} \\ \func{openat} & -- &\func{open} \\ - \func{readlinkat}& -- &\func{readlink}\\ - \func{renameat} & -- &\func{rename} \\ - \func{symlinkat} & -- &\func{symlink} \\ + \funcm{readlinkat}& -- &\func{readlink}\\ + \funcm{renameat} & -- &\func{rename} \\ + \funcm{symlinkat}& -- &\func{symlink} \\ \func{unlinkat} &$\bullet$&\func{unlink},\func{rmdir} \\ - \func{mkfifoat} & -- &\func{mkfifo} \\ + \funcm{mkfifoat} & -- &\func{mkfifo} \\ \hline \end{tabular} \caption{Corrispondenze fra le nuove funzioni ``\textit{at}'' e le @@ -1261,6 +1272,11 @@ prevista anche l'aggiunta di un ulteriore argomento finale, \param{flags}. \footnotetext{in questo caso l'argomento \param{flags} è disponibile ed utilizzabile solo a partire dal kernel 2.6.18.} +% TODO manca prototipo di fchmodat, verificare se metterlo o metter menzione +% TODO manca prototipo di fstatat, verificare se metterlo o metter menzione +% TODO manca prototipo di linkat, verificare se metterlo o metter menzione +% TODO manca prototipo di utimensat, verificare se metterlo o metter menzione + Per tutte le funzioni che lo prevedono, a parte \func{unlinkat} e \funcd{faccessat}, l'ulteriore argomento è stato introdotto solo per fornire un meccanismo con cui modificarne il comportamento nel caso si stia operando @@ -1269,7 +1285,7 @@ direttamente sullo stesso o sul file da esso referenziato. Dato che in certi casi esso può fornire ulteriori indicazioni per modificare il comportamento delle funzioni, \param{flags} deve comunque essere passato come maschera binaria, ed impostato usando i valori delle appropriate costanti -\texttt{AT\_*}, definite in \texttt{fcntl.h}. +\texttt{AT\_*}, definite in \headfile{fcntl.h}. Come esempio di questo secondo tipo di funzioni possiamo considerare \funcd{fchownat}, che può essere usata per sostituire sia \func{chown} @@ -1280,21 +1296,21 @@ che \func{lchown}; il suo prototipo è: \funcdecl{int fchownat(int dirfd, const char *pathname, uid\_t owner, gid\_t group, int flags)} - .Modifica la proprietà di un file. + Modifica la proprietà di un file. \bodydesc{la funzione restituisce gli stessi valori e gli stessi codici di errore di \func{chown}, ed in più: \begin{errlist} \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido. \item[\errcode{EINVAL}] \param{flags} non ha un valore valido. - \item[\errcode{ENOTDIR}] \param{pathname} è un pathname relativo, ma - \param{dirfd} fa riferimento ad un file. + \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo} + \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file. \end{errlist}} \end{functions} In questo caso il valore di \param{flags} stabilisce il comportamento della funzione quando la si applica ad un link simbolico, e l'unico valore -utilizzabile è \const{AT\_SYMLINK\_NOFOLLOW}\footnote{in \texttt{fcntl.h} è +utilizzabile è \const{AT\_SYMLINK\_NOFOLLOW}\footnote{in \headfile{fcntl.h} è definito anche \const{AT\_SYMLINK\_FOLLOW}, che richiede di dereferenziare i link simbolici, essendo questo però il comportamento adottato per un valore nullo di \param{flags} questo valore non viene mai usato.} che se impostato @@ -1317,8 +1333,8 @@ il suo prototipo è: \begin{errlist} \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido. \item[\errcode{EINVAL}] \param{flags} non ha un valore valido. - \item[\errcode{ENOTDIR}] \param{pathname} è un pathname relativo, ma - \param{dirfd} fa riferimento ad un file. + \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo} + \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file. \end{errlist}} \end{functions} @@ -1327,7 +1343,7 @@ La funzione esegue lo stesso controllo di accesso effettuabile con il comportamento rispetto a quello ordinario di \func{access}. In questo caso esso può essere specificato come maschera binaria di due valori: \begin{basedescript}{\desclabelwidth{3.0cm}} -\item[\const{AT\_EACCESS}] se impostato \funcd{faccessat} esegue il controllo +\item[\const{AT\_EACCES}] se impostato \funcd{faccessat} esegue il controllo dei permessi usando l'\ids{UID} effettivo invece di quello reale (il comportamento di default, che riprende quello di \func{access}). \item[\const{AT\_SYMLINK\_NOFOLLOW}] se impostato \funcd{faccessat} non esegue @@ -1351,8 +1367,8 @@ prototipo è: \begin{errlist} \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido. \item[\errcode{EINVAL}] \param{flags} non ha un valore valido. - \item[\errcode{ENOTDIR}] \param{pathname} è un pathname relativo, ma - \param{dirfd} fa riferimento ad un file. + \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo} + \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file. \end{errlist}} \end{functions} @@ -1365,6 +1381,12 @@ in cui questo è una directory, se però si imposta \param{flags} al valore di caso \param{pathname} deve essere una directory, che sarà rimossa qualora risulti vuota. +% TODO manca prototipo e motivazione di fexecve, da trattare qui in quanto +% inserita nello stesso standard e da usare con openat, vedi +% http://pubs.opengroup.org/onlinepubs/9699939699/toc.pdf + + + \subsection{La funzione \func{fcntl}} \label{sec:file_fcntl} @@ -1540,8 +1562,8 @@ di quest'ultimo non assegna bit separati alle tre diverse modalità queste costanti sono poste rispettivamente ai valori 0, 1 e 2.} Per questo motivo il valore della modalità di accesso corrente si ottiene eseguendo un AND binario del valore di ritorno di \func{fcntl} con la maschera -\const{O\_ACCMODE} (anch'essa definita in \file{fcntl.h}), che estrae i bit di -accesso dal \textit{file status flag}. +\const{O\_ACCMODE} (anch'essa definita in \headfile{fcntl.h}), che estrae i +bit di accesso dal \textit{file status flag}. @@ -1617,8 +1639,8 @@ elenco di alcuni esempi di esse è il seguente: In generale ogni dispositivo ha un suo insieme di operazioni specifiche effettuabili attraverso \func{ioctl}, tutte queste sono definite nell'header -file \file{sys/ioctl.h}, e devono essere usate solo sui dispositivi cui fanno -riferimento. Infatti anche se in genere i valori di \param{request} sono +file \headfile{sys/ioctl.h}, e devono essere usate solo sui dispositivi cui +fanno riferimento. Infatti anche se in genere i valori di \param{request} sono opportunamente differenziati a seconda del dispositivo\footnote{il kernel usa un apposito \textit{magic number} per distinguere ciascun dispositivo nella definizione delle macro da usare per \param{request}, in modo da essere @@ -1727,7 +1749,7 @@ ma le due funzioni sono rimaste. % LocalWords: Drepper path dirfd faccessat unlinkat access fchmodat chmod Di % LocalWords: fchownat chown fstatat futimesat utimes linkat mknodat mknod uid % LocalWords: readlinkat readlink renameat rename symlinkat symlink unlink gid -% LocalWords: mkfifoat mkfifo FDCWD EACCESS dereferenziazione rmdir REMOVEDIR +% LocalWords: mkfifoat mkfifo FDCWD dereferenziazione rmdir REMOVEDIR % LocalWords: epoll lsattr chattr FIOQSIZE ATFILE lutimes utimensat lchown % LocalWords: lstat owner FOLLOW