X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=796f05284d6fa8575c3812801f83328f5d7ae17f;hp=9b8be611f693aa9a771834c21c7af07a12917ab2;hb=ffb12837c5ed8ccc095bc9c88349cd19b5e6b472;hpb=a896c0a874a06d086369f5cc3c7e6cf347671835 diff --git a/fileunix.tex b/fileunix.tex index 9b8be61..796f052 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -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} @@ -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}. @@ -1128,16 +1128,18 @@ file descriptor libero di valore uguale o maggiore di \param{newfd} (e se 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. +che, quando un 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 @@ -1163,8 +1165,9 @@ 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.} + \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 @@ -1185,7 +1188,8 @@ 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ù: @@ -1202,10 +1206,11 @@ 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 \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 @@ -1269,7 +1274,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} @@ -1294,7 +1299,7 @@ che \func{lchown}; il suo prototipo è: 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 @@ -1327,7 +1332,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 @@ -1540,8 +1545,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 +1622,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 +1732,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