X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=b35d14c1e4a5be77613082b59797b32fe8793ee4;hp=ade65bcbb9ded2a06945e7553e8111aca86b54e1;hb=ffb12837c5ed8ccc095bc9c88349cd19b5e6b472;hpb=a896c0a874a06d086369f5cc3c7e6cf347671835 diff --git a/fileadv.tex b/fileadv.tex index ade65bc..b35d14c 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -226,13 +226,13 @@ agisce sempre su di un file; perciò le informazioni relative agli eventuali inode\itindex{inode},\footnote{in particolare, come accennato in fig.~\ref{fig:file_flock_struct}, i \textit{file lock} sono mantenuti in una \itindex{linked~list} \textit{linked list} di strutture - \struct{file\_lock}. La lista è referenziata dall'indirizzo di partenza - mantenuto dal campo \var{i\_flock} della struttura \struct{inode} (per le - definizioni esatte si faccia riferimento al file \file{fs.h} nei sorgenti - del kernel). Un bit del campo \var{fl\_flags} di specifica se si tratta di - un lock in semantica BSD (\const{FL\_FLOCK}) o POSIX (\const{FL\_POSIX}).} -dato che questo è l'unico riferimento in comune che possono avere due processi -diversi che aprono lo stesso file. + \kstruct{file\_lock}. La lista è referenziata dall'indirizzo di partenza + mantenuto dal campo \var{i\_flock} della struttura \kstruct{inode} (per le + definizioni esatte si faccia riferimento al file \file{include/linux/fs.h} + nei sorgenti del kernel). Un bit del campo \var{fl\_flags} di specifica se + si tratta di un lock in semantica BSD (\const{FL\_FLOCK}) o POSIX + (\const{FL\_POSIX}).} dato che questo è l'unico riferimento in comune che +possono avere due processi diversi che aprono lo stesso file. \begin{figure}[!htb] \centering @@ -1033,7 +1033,7 @@ al limite per il numero massimo di file aperti\footnote{ad esempio in Linux, quando, come nelle versioni più recenti del kernel, questo limite è stato rimosso, esso indica le dimensioni massime dei numeri usati nei \textit{file descriptor set}.\footnote{il suo valore, secondo lo standard POSIX - 1003.1-2001, è definito in \file{sys/select.h}, ed è pari a 1024.} + 1003.1-2001, è definito in \headfile{sys/select.h}, ed è pari a 1024.} Si tenga presente che i \textit{file descriptor set} devono sempre essere inizializzati con \macro{FD\_ZERO}; passare a \func{select} un valore non @@ -1127,12 +1127,12 @@ Lo standard POSIX è rimasto a lungo senza primitive per l'\textit{I/O multiplexing}, introdotto solo con le ultime revisioni dello standard (POSIX 1003.1g-2000 e POSIX 1003.1-2001). La scelta è stata quella di seguire l'interfaccia creata da BSD, ma prevede che tutte le funzioni ad esso relative -vengano dichiarate nell'header \file{sys/select.h}, che sostituisce i +vengano dichiarate nell'header \headfile{sys/select.h}, che sostituisce i precedenti, ed inoltre aggiunge a \func{select} una nuova funzione \funcd{pselect},\footnote{il supporto per lo standard POSIX 1003.1-2001, ed - l'header \file{sys/select.h}, compaiono in Linux a partire dalle \acr{glibc} - 2.1. Le \acr{libc4} e \acr{libc5} non contengono questo header, le - \acr{glibc} 2.0 contengono una definizione sbagliata di \func{psignal}, + l'header \headfile{sys/select.h}, compaiono in Linux a partire dalle + \acr{glibc} 2.1. Le \acr{libc4} e \acr{libc5} non contengono questo header, + le \acr{glibc} 2.0 contengono una definizione sbagliata di \func{psignal}, senza l'argomento \param{sigmask}, la definizione corretta è presente dalle \acr{glibc} 2.1-2.2.1 se si è definito \macro{\_GNU\_SOURCE} e nelle \acr{glibc} 2.2.2-2.2.4 se si è definito \macro{\_XOPEN\_SOURCE} con valore @@ -1339,7 +1339,7 @@ normali e prioritari, vale a dire \const{POLLRDNORM}, \const{POLLWRNORM}, in stile SysV (in particolare le ultime due non vengono usate su Linux), e sono utilizzabili soltanto qualora si sia definita la macro \macro{\_XOPEN\_SOURCE}.\footnote{e ci si ricordi di farlo sempre in testa al - file, definirla soltanto prima di includere \file{sys/poll.h} non è + file, definirla soltanto prima di includere \headfile{sys/poll.h} non è sufficiente.} In caso di successo funzione ritorna restituendo il numero di file (un valore @@ -2164,7 +2164,7 @@ segnali. Una volta completata l'inizializzazione verrà eseguito indefinitamente il ciclo principale del programma (\texttt{\small 2--45}) che si è riportato in fig.~\ref{fig:fiforeporter_code_body}, fintanto che questo non riceva un -segnale di \texttt{SIGINT} (ad esempio con la pressione di \texttt{C-c}). Il +segnale di \signal{SIGINT} (ad esempio con la pressione di \texttt{C-c}). Il ciclo prevede che si attenda (\texttt{\small 2--3}) la presenza di un file descriptor pronto in lettura con \func{epoll\_wait},\footnote{si ricordi che entrambi i file descriptor \var{fifofd} e \var{sigfd} sono stati posti in @@ -2189,7 +2189,7 @@ Il primo condizionale (\texttt{\small 6--24}) è relativo al caso che si sia ricevuto un segnale e che il file descriptor pronto corrisponda (\texttt{\small 6}) a \var{sigfd}. Dato che in generale si possono ricevere anche notifiche relativi a più di un singolo segnale, si è scelto di leggere -una struttura \const{signalfd\_siginfo} alla volta, eseguendo la lettura +una struttura \struct{signalfd\_siginfo} alla volta, eseguendo la lettura all'interno di un ciclo (\texttt{\small 8--24}) che prosegue fintanto che vi siano dati da leggere. @@ -2211,7 +2211,7 @@ struttura \const{signalfd\_siginfo} letta in \var{siginf}\footnote{per la definizione si è omessa dal codice di fig.~\ref{fig:fiforeporter_code_init} per brevità.} ed il \textit{pid} del processo da cui lo ha ricevuto; inoltre (\texttt{\small 21--24}) si controllerà anche se il segnale ricevuto è -\var{SIGINT}, che si è preso come segnale da utilizzare per la terminazione +\signal{SIGINT}, che si è preso come segnale da utilizzare per la terminazione del programma, che verrà eseguita dopo aver rimosso il file della \textit{name fifo}. @@ -2611,7 +2611,7 @@ supportano meccanismi simili). Alcune di esse sono realizzate, e solo a partire dalla versione 2.4 del kernel, attraverso l'uso di alcuni \textsl{comandi} aggiuntivi per la funzione \func{fcntl} (vedi sez.~\ref{sec:file_fcntl}), che divengono disponibili soltanto se si è -definita la macro \macro{\_GNU\_SOURCE} prima di includere \file{fcntl.h}. +definita la macro \macro{\_GNU\_SOURCE} prima di includere \headfile{fcntl.h}. \itindbeg{file~lease} @@ -2897,7 +2897,7 @@ osservazione l'interfaccia fornisce due funzioni, la prima di queste è \bodydesc{La funzione restituisce un valore positivo in caso di successo, o $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EACCESS}] non si ha accesso in lettura al file indicato. + \item[\errcode{EACCES}] non si ha accesso in lettura al file indicato. \item[\errcode{EINVAL}] \param{mask} non contiene eventi legali o \param{fd} non è un file descriptor di \textit{inotify}. \item[\errcode{ENOSPC}] si è raggiunto il numero massimo di voci di @@ -3345,7 +3345,7 @@ Lo standard prevede che tutte le operazioni di I/O asincrono siano controllate attraverso l'uso di una apposita struttura \struct{aiocb} (il cui nome sta per \textit{asyncronous I/O control block}), che viene passata come argomento a tutte le funzioni dell'interfaccia. La sua definizione, come effettuata in -\file{aio.h}, è riportata in fig.~\ref{fig:file_aiocb}. Nello steso file è +\headfile{aio.h}, è riportata in fig.~\ref{fig:file_aiocb}. Nello steso file è definita la macro \macro{\_POSIX\_ASYNCHRONOUS\_IO}, che dichiara la disponibilità dell'interfaccia per l'I/O asincrono. @@ -3546,7 +3546,7 @@ codice di errore, ed il suo codice di ritorno sarà -1, inoltre il meccanismo di notifica non verrà invocato. Se si specifica una operazione relativa ad un altro file descriptor il risultato è indeterminato. In caso di successo, i possibili valori di ritorno per \func{aio\_cancel} (anch'essi definiti in -\file{aio.h}) sono tre: +\headfile{aio.h}) sono tre: \begin{basedescript}{\desclabelwidth{3.0cm}} \item[\const{AIO\_ALLDONE}] indica che le operazioni di cui si è richiesta la cancellazione sono state già completate, @@ -4099,7 +4099,7 @@ virtuale. Questa funzione è \funcd{mprotect} ed il suo prototipo è: \begin{errlist} \item[\errcode{EINVAL}] il valore di \param{addr} non è valido o non è un multiplo di \const{PAGE\_SIZE}. - \item[\errcode{EACCESS}] l'operazione non è consentita, ad esempio si è + \item[\errcode{EACCES}] l'operazione non è consentita, ad esempio si è cercato di marcare con \const{PROT\_WRITE} un segmento di memoria cui si ha solo accesso in lettura. % \item[\errcode{ENOMEM}] non è stato possibile allocare le risorse @@ -4159,7 +4159,7 @@ dimensione che si vuole ottenere. Infine l'argomento \param{flags} è una maschera binaria per i flag che controllano il comportamento della funzione. Il solo valore utilizzato è \const{MREMAP\_MAYMOVE}\footnote{per poter utilizzare questa costante occorre aver definito \macro{\_GNU\_SOURCE} prima - di includere \file{sys/mman.h}.} che consente di eseguire l'espansione + di includere \headfile{sys/mman.h}.} che consente di eseguire l'espansione anche quando non è possibile utilizzare il precedente indirizzo. Per questo motivo, se si è usato questo flag, la funzione può restituire un indirizzo della nuova zona di memoria che non è detto coincida con \param{old\_address}. @@ -4488,7 +4488,7 @@ La standardizzazione delle due funzioni all'interno della revisione POSIX.1-2001 prevede anche che sia possibile avere un limite al numero di elementi del vettore \param{vector}. Qualora questo sussista, esso deve essere indicato dal valore dalla costante \const{IOV\_MAX}, definita come le altre -costanti analoghe (vedi sez.~\ref{sec:sys_limits}) in \file{limits.h}; lo +costanti analoghe (vedi sez.~\ref{sec:sys_limits}) in \headfile{limits.h}; lo stesso valore deve essere ottenibile in esecuzione tramite la funzione \func{sysconf} richiedendo l'argomento \const{\_SC\_IOV\_MAX} (vedi sez.~\ref{sec:sys_sysconf}). @@ -5441,7 +5441,7 @@ livello di kernel. % LocalWords: ENFILE lenght segment violation SIGSEGV FIXED msync munmap copy % LocalWords: DoS Denial Service EXECUTABLE NORESERVE LOCKED swapping stack fs % LocalWords: GROWSDOWN ANON POPULATE prefaulting SIGBUS fifo VME fork old SFD -% LocalWords: exec atime ctime mtime mprotect addr EACCESS mremap address new +% LocalWords: exec atime ctime mtime mprotect addr mremap address new % LocalWords: long MAYMOVE realloc VMA virtual Ingo Molnar remap pages pgoff % LocalWords: dall' fault cache linker prelink advisory discrectionary lock fl % LocalWords: flock shared exclusive operation dup inode linked NFS cmd ENOLCK