X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=3a16dddbd77f226272fdc225c0713450c7944e0a;hp=3f4d4bbf63bdf8aa699865354a4514f78bc335e2;hb=dcf2c2df897955ff3503a7c426025457ab456fd7;hpb=b3593007c4edd76ecbf7386967c1b25d27eed828 diff --git a/fileunix.tex b/fileunix.tex index 3f4d4bb..3a16ddd 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -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 @@ -230,7 +230,7 @@ quella che crea l'associazione fra un \textit{pathname} ed un 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 @@ -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. @@ -1254,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 @@ -1272,7 +1272,10 @@ 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 +% 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 @@ -1293,7 +1296,7 @@ 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ù: @@ -1378,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}