X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=b4e7b5705a16c2a06b3cfb0001880d285f588150;hp=5508c50c9c882f4ced4136c647ca53d63404a1f9;hb=ff2d0141751ed62ef56e5bfd226c589311b8b669;hpb=46029a05c9009df38022e82b0f20732290388ef1 diff --git a/fileunix.tex b/fileunix.tex index 5508c50..b4e7b57 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -57,11 +57,11 @@ ed un elenco dei file aperti nella \textit{file table}. La \textit{process table} è una tabella che contiene una voce per ciascun processo attivo nel sistema. In Linux ciascuna voce è costituita da una -struttura di tipo \var{task\_struct} nella quale sono raccolte tutte le +struttura di tipo \struct{task\_struct} nella quale sono raccolte tutte le informazioni relative al processo; fra queste informazioni c'è anche il -puntatore ad una ulteriore struttura di tipo \var{files\_struct}, in cui sono -contenute le informazioni relative ai file che il processo ha aperto, ed in -particolare: +puntatore ad una ulteriore struttura di tipo \struct{files\_struct}, in cui +sono contenute le informazioni relative ai file che il processo ha aperto, ed +in particolare: \begin{itemize*} \item i flag relativi ai file descriptor. \item il numero di file aperti. @@ -73,14 +73,14 @@ quest'ultima tabella. La \textit{file table} è una tabella che contiene una voce per ciascun file che è stato aperto nel sistema. In Linux è costituita da strutture di tipo -\var{file}; in ciascuna di esse sono tenute varie informazioni relative al +\struct{file}; in ciascuna di esse sono tenute 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 all'inode\index{inode}\footnote{nel kernel 2.4.x si è in - realtà passati ad un puntatore ad una struttura \var{dentry} che punta a + realtà passati ad un puntatore ad una struttura \struct{dentry} che punta a sua volta all'inode\index{inode} passando per la nuova struttura del VFS.} del file. %\item un puntatore alla tabella delle funzioni \footnote{la struttura @@ -162,9 +162,10 @@ stesso inode\index{inode}). Nelle vecchie versioni di Unix (ed anche in Linux fino al kernel 2.0.x) il numero di file aperti era anche soggetto ad un limite massimo dato dalle dimensioni del vettore di puntatori con cui era realizzata la tabella dei file -descriptor dentro \var{file\_struct}; questo limite intrinseco nei kernel più -recenti non sussiste più, dato che si è passati da un vettore ad una lista, ma -restano i limiti imposti dall'amministratore (vedi \secref{sec:sys_limits}). +descriptor dentro \struct{file\_struct}; questo limite intrinseco nei kernel +più recenti non sussiste più, dato che si è passati da un vettore ad una +lista, ma restano i limiti imposti dall'amministratore (vedi +\secref{sec:sys_limits}). @@ -194,30 +195,30 @@ prototipo \headdecl{fcntl.h} \funcdecl{int open(const char *pathname, int flags)} \funcdecl{int open(const char *pathname, int flags, mode\_t mode)} - Apre il file indicato da \var{pathname} nella modalità indicata da - \var{flags}, e, nel caso il file sia creato, con gli eventuali permessi - specificati da \var{mode}. + Apre il file indicato da \param{pathname} nella modalità indicata da + \param{flags}, e, nel caso il file sia creato, con gli eventuali permessi + specificati da \param{mode}. \bodydesc{La funzione ritorna il file descriptor in caso di successo e -1 in caso di errore. In questo caso la variabile \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EEXIST}] \var{pathname} esiste e si è specificato + \item[\errcode{EEXIST}] \param{pathname} esiste e si è specificato \const{O\_CREAT} e \const{O\_EXCL}. - \item[\errcode{EISDIR}] \var{pathname} indica una directory e si è tentato + \item[\errcode{EISDIR}] \param{pathname} indica una directory e si è tentato l'accesso in scrittura. \item[\errcode{ENOTDIR}] si è specificato \const{O\_DIRECTORY} e - \var{pathname} non è una directory. + \param{pathname} non è una directory. \item[\errcode{ENXIO}] si sono impostati \const{O\_NOBLOCK} o \const{O\_WRONLY} ed il file è una fifo che non viene letta da nessun - processo o \var{pathname} è un file di dispositivo ma il dispositivo è + processo o \param{pathname} è un file di dispositivo ma il dispositivo è assente. - \item[\errcode{ENODEV}] \var{pathname} si riferisce a un file di dispositivo - che non esiste. + \item[\errcode{ENODEV}] \param{pathname} si riferisce a un file di + dispositivo che non esiste. \item[\errcode{ETXTBSY}] si è cercato di accedere in scrittura all'immagine di un programma in esecuzione. \item[\errcode{ELOOP}] si sono incontrati troppi link simbolici nel risolvere - pathname o si è indicato \const{O\_NOFOLLOW} e \var{pathname} è un link + pathname o si è indicato \const{O\_NOFOLLOW} e \param{pathname} è un link simbolico. \end{errlist} ed inoltre \errval{EACCES}, \errval{ENAMETOOLONG}, \errval{ENOENT}, @@ -226,8 +227,8 @@ prototipo \end{functions} La funzione apre il file, usando il primo file descriptor libero, e crea -l'opportuna voce (cioè la struttura \var{file}) nella file table. Viene usato -sempre il file descriptor con il valore più basso. +l'opportuna voce (cioè la struttura \struct{file}) nella file table. Viene +usato sempre il file descriptor con il valore più basso. \begin{table}[!htb] \centering @@ -243,8 +244,8 @@ sempre il file descriptor con il valore pi \hline % modalità di apertura del file \hline \const{O\_CREAT} & se il file non esiste verrà creato, con le regole di - titolarità del file viste in \secref{sec:file_ownership}. Il parametro - \var{mode} deve essere specificato. \\ + titolarità del file viste in \secref{sec:file_ownership}. L'argomento + \param{mode} deve essere specificato. \\ \const{O\_EXCL} & usato in congiunzione con \const{O\_CREAT} fa sì che l'esistenza del file diventi un errore\protect\footnotemark\ che fa fallire \func{open} con \errcode{EEXIST}. \\ @@ -252,7 +253,7 @@ sempre il file descriptor con il valore pi valore specifica anche una modalità di operazione (vedi sotto), e comporta che \func{open} ritorni immediatamente (l'opzione ha senso solo per le fifo, torneremo questo in \secref{sec:ipc_named_pipe}). \\ - \const{O\_NOCTTY} & se \var{pathname} si riferisce ad un device di + \const{O\_NOCTTY} & se \param{pathname} si riferisce ad un device di terminale, questo non diventerà il terminale di controllo, anche se il processo non ne ha ancora uno (si veda \secref{sec:sess_ctrl_term}). \\ \const{O\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi @@ -263,11 +264,11 @@ sempre il file descriptor con il valore pi apertura consente la scrittura, allora la sua lunghezza verrà troncata a zero. Se il file è un terminale o una fifo il flag verrà ignorato, negli altri casi il comportamento non è specificato. \\ - \const{O\_NOFOLLOW} & se \var{pathname} è un link simbolico la chiamata + \const{O\_NOFOLLOW} & se \param{pathname} è un link simbolico la chiamata fallisce. Questa è un'estensione BSD aggiunta in Linux dal kernel 2.1.126. Nelle versioni precedenti i link simbolici sono sempre seguiti, e questa opzione è ignorata. \\ - \const{O\_DIRECTORY} & se \var{pathname} non è una directory la chiamata + \const{O\_DIRECTORY} & se \param{pathname} non è una directory la chiamata fallisce. Questo flag è specifico di Linux ed è stato introdotto con il kernel 2.1.126 per evitare dei \textit{DoS}\index{DoS}\protect\footnotemark\ quando @@ -352,7 +353,7 @@ 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 \var{file} (al solito si veda lo schema +campo \var{f\_flags} della struttura \struct{file} (al solito si veda lo schema di \figref{fig:file_proc_file}). Essi sono divisi in tre categorie principali: \begin{itemize} @@ -389,7 +390,7 @@ questo motivo per creare un nuovo file c'era una system call apposita, \func{creat}, il cui prototipo è: \begin{prototype}{fcntl.h} {int creat(const char *pathname, mode\_t mode)} - Crea un nuovo file vuoto, con i permessi specificati da \var{mode}. È del + Crea un nuovo file vuoto, con i permessi specificati da \param{mode}. È del tutto equivalente a \code{open(filedes, O\_CREAT|O\_WRONLY|O\_TRUNC, mode)}. \end{prototype} \noindent adesso questa funzione resta solo per compatibilità con i vecchi @@ -402,12 +403,12 @@ programmi. La funzione \func{close} permette di chiudere un file, in questo modo il file descriptor ritorna disponibile; il suo prototipo è: \begin{prototype}{unistd.h}{int close(int fd)} - Chiude il descrittore \var{fd}. + Chiude il descrittore \param{fd}. \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore, ed in questo caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EBADF}] \var{fd} non è un descrittore valido. + \item[\errcode{EBADF}] \param{fd} non è un descrittore valido. \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale. \end{errlist} ed inoltre \errval{EIO}.} @@ -415,10 +416,10 @@ descriptor ritorna disponibile; il suo prototipo La chiusura di un file rilascia ogni blocco (il \textit{file locking}\index{file!locking} è trattato in \secref{sec:file_locking}) che il -processo poteva avere acquisito su di esso; se \var{fd} è l'ultimo riferimento -(di eventuali copie) ad un file aperto, tutte le risorse nella file table -vengono rilasciate. Infine se il file descriptor era l'ultimo riferimento ad -un file su disco quest'ultimo viene cancellato. +processo poteva avere acquisito su di esso; se \param{fd} è l'ultimo +riferimento (di eventuali copie) ad un file aperto, tutte le risorse nella +file table vengono rilasciate. Infine se il file descriptor era l'ultimo +riferimento ad un file su disco quest'ultimo viene cancellato. Si ricordi che quando un processo termina anche tutti i suoi file descriptor vengono chiusi, molti programmi sfruttano questa caratteristica e non usano @@ -446,7 +447,7 @@ di ripetere tre volte il comando prima di eseguire lo shutdown). Come già accennato in \secref{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 \var{file}) espressa da un numero intero +mantenuto nel campo \var{f\_pos} di \struct{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. @@ -492,7 +493,7 @@ Come accennato in \secref{sec:file_file_size} con \func{lseek} impostare la posizione corrente anche oltre la fine del file, e alla successiva scrittura il file sarà esteso. La chiamata non causa nessuna attività di input/output, si limita a modificare la posizione corrente nel -kernel (cioè \var{f\_pos} in \var{file}, vedi \figref{fig:file_proc_file}). +kernel (cioè \var{f\_pos} in \param{file}, vedi \figref{fig:file_proc_file}). Dato che la funzione ritorna la nuova posizione, usando il valore zero per \param{offset} si può riottenere la posizione corrente nel file chiamando la @@ -525,7 +526,8 @@ leggere i dati che contiene utilizzando la funzione \func{read}, il cui prototipo è: \begin{prototype}{unistd.h}{ssize\_t read(int fd, void * buf, size\_t count)} - Cerca di leggere \var{count} byte dal file \var{fd} al buffer \var{buf}. + Cerca di leggere \param{count} byte dal file \param{fd} al buffer + \param{buf}. \bodydesc{La funzione ritorna il numero di byte letti in caso di successo e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori: @@ -537,12 +539,12 @@ prototipo \end{errlist} ed inoltre \errval{EBADF}, \errval{EIO}, \errval{EISDIR}, \errval{EBADF}, \errval{EINVAL} e \errval{EFAULT} ed eventuali altri errori dipendenti dalla - natura dell'oggetto connesso a \var{fd}.} + natura dell'oggetto connesso a \param{fd}.} \end{prototype} -La funzione tenta di leggere \var{count} byte a partire dalla posizione +La funzione tenta di leggere \param{count} byte a partire dalla posizione corrente nel file. Dopo la lettura la posizione sul file è spostata -automaticamente in avanti del numero di byte letti. Se \var{count} è zero la +automaticamente in avanti del numero di byte letti. Se \param{count} è zero la funzione restituisce zero senza nessun altro risultato. Si deve sempre tener presente che non è detto che la funzione \func{read} @@ -601,8 +603,8 @@ definizione di un'altra funzione di lettura, \func{pread}, il cui prototipo \begin{prototype}{unistd.h} {ssize\_t pread(int fd, void * buf, size\_t count, off\_t offset)} -Cerca di leggere \var{count} byte dal file \var{fd}, a partire dalla posizione -\var{offset}, nel buffer \var{buf}. +Cerca di leggere \param{count} byte dal file \param{fd}, a partire dalla +posizione \param{offset}, nel buffer \param{buf}. \bodydesc{La funzione ritorna il numero di byte letti in caso di successo e -1 in caso di errore, nel qual caso \var{errno} assumerà i valori già visti per @@ -619,7 +621,7 @@ modificare la posizione corrente. posizione corrente sul file, ma permette di eseguire l'operazione atomicamente. Questo può essere importante quando la posizione sul file viene condivisa da processi diversi (vedi \secref{sec:file_sharing}). Il valore di -\var{offset} fa sempre riferimento all'inizio del file. +\param{offset} fa sempre riferimento all'inizio del file. \subsection{La funzione \func{write}} @@ -629,17 +631,17 @@ Una volta che un file scrivere su di esso utilizzando la funzione \func{write}, il cui prototipo è: \begin{prototype}{unistd.h}{ssize\_t write(int fd, void * buf, size\_t count)} - Scrive \var{count} byte dal buffer \var{buf} sul file \var{fd}. + Scrive \param{count} byte dal buffer \param{buf} sul file \param{fd}. \bodydesc{La funzione ritorna il numero di byte scritti in caso di successo e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EINVAL}] \var{fd} è connesso ad un oggetto che non consente la - scrittura. + \item[\errcode{EINVAL}] \param{fd} è connesso ad un oggetto che non consente + la scrittura. \item[\errcode{EFBIG}] si è cercato di scrivere oltre la dimensione massima consentita dal filesystem o il limite per le dimensioni dei file del processo o su una posizione oltre il massimo consentito. - \item[\errcode{EPIPE}] \var{fd} è connesso ad una pipe il cui altro capo è + \item[\errcode{EPIPE}] \param{fd} è connesso ad una pipe il cui altro capo è chiuso in lettura; in questo caso viene anche generato il segnale \const{SIGPIPE}, se questo viene gestito (o bloccato o ignorato) la funzione ritorna questo errore. @@ -650,11 +652,11 @@ scrivere su di esso utilizzando la funzione \func{write}, il cui prototipo \end{errlist} ed inoltre \errval{EBADF}, \errval{EIO}, \errval{EISDIR}, \errval{EBADF}, \errval{ENOSPC}, \errval{EINVAL} e \errval{EFAULT} ed eventuali altri errori - dipendenti dalla natura dell'oggetto connesso a \var{fd}.} + dipendenti dalla natura dell'oggetto connesso a \param{fd}.} \end{prototype} -Come nel caso di \func{read} la funzione tenta di scrivere \var{count} byte a -partire dalla posizione corrente nel file e sposta automaticamente la +Come nel caso di \func{read} la funzione tenta di scrivere \param{count} byte +a partire dalla posizione corrente nel file e sposta automaticamente la posizione in avanti del numero di byte scritti. Se il file è aperto in modalità \const{O\_APPEND} i dati vengono sempre scritti alla fine del file. Lo standard POSIX richiede che i dati scritti siano immediatamente disponibili @@ -662,10 +664,10 @@ ad una \func{read} chiamata dopo che la \func{write} che li ha scritti ritornata; ma dati i meccanismi di caching non è detto che tutti i filesystem supportino questa capacità. -Se \var{count} è zero la funzione restituisce zero senza fare nient'altro. Per -i file ordinari il numero di byte scritti è sempre uguale a quello indicato -da \var{count}, a meno di un errore. Negli altri casi si ha lo stesso -comportamento di \func{read}. +Se \param{count} è zero la funzione restituisce zero senza fare nient'altro. +Per i file ordinari il numero di byte scritti è sempre uguale a quello +indicato da \param{count}, a meno di un errore. Negli altri casi si ha lo +stesso comportamento di \func{read}. Anche per \func{write} lo standard Unix98 definisce un'analoga \func{pwrite} per scrivere alla posizione indicata senza modificare la posizione corrente @@ -673,8 +675,8 @@ nel file, il suo prototipo \begin{prototype}{unistd.h} {ssize\_t pwrite(int fd, void * buf, size\_t count, off\_t offset)} -Cerca di scrivere sul file \var{fd}, a partire dalla posizione \var{offset}, -\var{count} byte dal buffer \var{buf}. +Cerca di scrivere sul file \param{fd}, a partire dalla posizione +\param{offset}, \param{count} byte dal buffer \param{buf}. \bodydesc{La funzione ritorna il numero di byte letti in caso di successo e -1 in caso di errore, nel qual caso \var{errno} assumerà i valori già visti per @@ -714,9 +716,9 @@ Il primo caso su disco; sulla base di quanto visto in \secref{sec:file_fd} avremo una situazione come quella illustrata in \figref{fig:file_mult_acc}: ciascun processo avrà una sua voce nella \textit{file table} referenziata da un -diverso file descriptor nella sua \var{file\_struct}. Entrambe le voci nella -\textit{file table} faranno però riferimento allo stesso inode\index{inode} su -disco. +diverso file descriptor nella sua \struct{file\_struct}. Entrambe le voci +nella \textit{file table} faranno però riferimento allo stesso +inode\index{inode} su disco. Questo significa che ciascun processo avrà la sua posizione corrente sul file, la sua modalità di accesso e versioni proprie di tutte le proprietà che @@ -734,9 +736,9 @@ stesso file, in particolare occorre tenere presente che: dimensione corrente del file letta dall'inode\index{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 \var{file} della \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 + \var{f\_pos} nella struttura \struct{file} della \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 dall'inode\index{inode}. \end{itemize} @@ -753,7 +755,7 @@ caso dei file aperti che vengono ereditati dal processo figlio all'esecuzione di una \func{fork} (si ricordi quanto detto in \secref{sec:proc_fork}). La situazione è illustrata in \figref{fig:file_acc_child}; dato che il processo figlio riceve una copia dello spazio di indirizzi del padre, riceverà anche -una copia di \var{file\_struct} e relativa tabella dei file aperti. +una copia di \struct{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 @@ -765,12 +767,12 @@ corrente nel file varier 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 - \var{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 -\var{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}. + \struct{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 +processo e non vengono modificati dalle azioni degli altri anche in caso di +condivisione della stessa voce della \textit{file table}. @@ -885,7 +887,7 @@ Entrambe le funzioni forzano la sincronizzazione col disco di tutti i dati del file specificato, ed attendono fino alla conclusione delle operazioni; \func{fsync} forza anche la sincronizzazione dei metadati del file (che riguardano sia le modifiche alle tabelle di allocazione dei settori, che gli -altri dati contenuti nell'inode\index{inode} che si leggono con \var{fstat} +altri dati contenuti nell'inode\index{inode} che si leggono con \func{fstat}, come i tempi del file). Si tenga presente che questo non comporta la sincronizzazione della @@ -921,10 +923,10 @@ La funzione ritorna, come \func{open}, il primo file descriptor libero. Il 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 \figref{fig:file_dup}: l'effetto della funzione è -semplicemente quello di copiare il valore nella struttura \var{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. +semplicemente quello di copiare il valore nella struttura +\struct{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. \begin{figure}[htb] \centering \includegraphics[width=15cm]{img/filedup} @@ -1028,7 +1030,7 @@ un esempio per la duplicazione dei file descriptor, una lista dei possibili valori è riportata di seguito: \begin{basedescript}{\desclabelwidth{2.0cm}} \item[\const{F\_DUPFD}] trova il primo file descriptor disponibile di valore - maggiore o uguale ad \param{arg} e ne fa una copia di \var{fd}. In caso di + maggiore o uguale ad \param{arg} e ne fa una copia di \param{fd}. In caso di successo ritorna il nuovo file descriptor. Gli errori possibili sono \errcode{EINVAL} se \param{arg} è negativo o maggiore del massimo consentito o \errcode{EMFILE} se il processo ha già raggiunto il massimo numero di @@ -1039,7 +1041,7 @@ valori \const{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella esecuzione di una \func{exec} (vedi \secref{sec:proc_exec}). \item[\const{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di - \var{fd}, se \const{FD\_CLOEXEC} è impostato i file descriptor aperti + \param{fd}, se \const{FD\_CLOEXEC} è impostato i file descriptor aperti vengono chiusi attraverso una \func{exec} altrimenti (il comportamento predefinito) restano aperti. \item[\const{F\_GETFL}] ritorna il valore del \textit{file status flag}, @@ -1071,13 +1073,13 @@ valori nel controllo di sessione; a ciascuno di essi è associato un identificatore (un numero positivo analogo al \acr{pid}).} che è preposto alla ricezione dei segnali \const{SIGIO} e \const{SIGURG} per gli eventi - associati al file descriptor \var{fd}. Nel caso di un process group viene + associati al file descriptor \param{fd}. Nel caso di un process group viene restituito un valore negativo il cui valore assoluto corrisponde all'identificatore del process group. \item[\const{F\_SETOWN}] imposta, con il valore dell'argomento \param{arg}, l'identificatore del processo o del \textit{process group} che riceverà i segnali \const{SIGIO} e \const{SIGURG} per gli eventi associati al file - descriptor \var{fd}. Come per \const{F\_GETOWN}, per impostare un process + descriptor \param{fd}. Come per \const{F\_GETOWN}, per impostare un process group si deve usare per \param{arg} un valore negativo, il cui valore assoluto corrisponde all'identificatore del process group. \item[\const{F\_GETSIG}] restituisce il valore del segnale inviato quando ci @@ -1095,7 +1097,7 @@ valori \const{SA\_SIGINFO}, (vedi \secref{sec:sig_sigaction}), di rendere disponibili al manipolatore informazioni ulteriori informazioni riguardo il file che ha generato il segnale attraverso i valori restituiti in - \type{siginfo\_t} (come vedremo in + \struct{siginfo\_t} (come vedremo in \secref{sec:file_asyncronous_io}).\footnote{i due comandi \const{F\_SETSIG} e \const{F\_GETSIG} sono una estensione specifica di Linux.} \end{basedescript}