X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=c91f34e72f1606437145dbab7c4b5833cc551311;hp=9e2bf77df693713c7f845d5b83c00828ddcdf0fa;hb=9a6d19e384fe9b1afbe4d9124ac34eaf7aa57562;hpb=3b7696e141a7c9c5d9ddec1654aa2a1108350bde diff --git a/fileadv.tex b/fileadv.tex index 9e2bf77..c91f34e 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -136,16 +136,16 @@ opportune macro di preprocessore: \headdecl{sys/time.h} \headdecl{sys/types.h} \headdecl{unistd.h} - \funcdecl{FD\_ZERO(fd\_set *set)} + \funcdecl{void \macro{FD\_ZERO}(fd\_set *set)} Inizializza l'insieme (vuoto). - \funcdecl{FD\_SET(int fd, fd\_set *set)} + \funcdecl{void \macro{FD\_SET}(int fd, fd\_set *set)} Inserisce il file descriptor \param{fd} nell'insieme. - \funcdecl{FD\_CLR(int fd, fd\_set *set)} + \funcdecl{void \macro{FD\_CLR}(int fd, fd\_set *set)} Rimuove il file descriptor \param{fd} nell'insieme. - \funcdecl{FD\_ISSET(int fd, fd\_set *set)} + \funcdecl{int \macro{FD\_ISSET}(int fd, fd\_set *set)} Controlla se il file descriptor \param{fd} è nell'insieme. \end{functions} @@ -193,7 +193,7 @@ La funzione restituisce il numero di file descriptor pronti,\footnote{questo funzione è recente, ed esistono ancora alcune versioni di Unix che non si comportano in questo modo.} e ciascun insieme viene sovrascritto per indicare quali sono i file descriptor pronti per le operazioni ad esso -relative, in modo da poterli controllare con \const{FD\_ISSET}. Se invece si +relative, in modo da poterli controllare con \macro{FD\_ISSET}. Se invece si ha un timeout viene restituito un valore nullo e gli insiemi non vengono modificati. In caso di errore la funzione restituisce -1, ed i valori dei tre insiemi sono indefiniti e non si può fare nessun affidamento sul loro @@ -420,8 +420,8 @@ distinzione ha senso solo per i dati \textit{out-of-band} dei socket (vedi sez.~\ref{sec:TCP_urgent_data}), ma su questo e su come \func{poll} reagisce alle varie condizioni dei socket torneremo in sez.~\ref{sec:TCP_serv_poll}, dove vedremo anche un esempio del suo utilizzo. Si tenga conto comunque che le -costanti relative ai diversi tipi di dati (come \macro{POLLRDNORM} e -\macro{POLLRDBAND}) sono utilizzabili soltanto qualora si sia definita la +costanti relative ai diversi tipi di dati (come \const{POLLRDNORM} e +\const{POLLRDBAND}) 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 è sufficiente.} @@ -736,7 +736,7 @@ esaurimento. Oltre alle operazioni di lettura e scrittura l'interfaccia POSIX.1b mette a disposizione un'altra operazione, quella di sincronizzazione dell'I/O, -compiuta dalla funzione \func{aio\_fsync}, che ha lo stesso effetto della +compiuta dalla funzione \funcd{aio\_fsync}, che ha lo stesso effetto della analoga \func{fsync}, ma viene eseguita in maniera asincrona; il suo prototipo è: \begin{prototype}{aio.h} @@ -946,7 +946,7 @@ prototipi sono: \end{errlist} ed inoltre \errval{EISDIR}, \errval{ENOMEM}, \errval{EFAULT} (se non sono stato allocati correttamente i buffer specificati nei campi - \func{iov\_base}), più tutti gli ulteriori errori che potrebbero avere le + \var{iov\_base}), più tutti gli ulteriori errori che potrebbero avere le usuali funzioni di lettura e scrittura eseguite su \param{fd}.} \end{functions} @@ -1127,7 +1127,7 @@ tab.~\ref{tab:file_mmap_flag}. visibili agli altri processi che mappano lo stesso file.\footnotemark Il file su disco però non sarà aggiornato fino alla chiamata di \func{msync} o - \func{unmap}), e solo allora le modifiche saranno + \func{munmap}), e solo allora le modifiche saranno visibili per l'I/O convenzionale. Incompatibile con \const{MAP\_PRIVATE}. \\ \const{MAP\_PRIVATE} & I cambiamenti sulla memoria mappata non vengono @@ -1547,14 +1547,14 @@ anche se richiesto attraverso un file descriptor, agisce sempre su un file; perciò le informazioni relative agli eventuali \textit{file lock} sono mantenute a livello di inode\index{inode},\footnote{in particolare, come accennato in fig.~\ref{fig:file_flock_struct}, i \textit{file lock} sono - mantenuti un una \textit{linked list}\index{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. + mantenuti un una \textit{linked~list}\index{\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. \begin{figure}[htb] \centering @@ -1801,7 +1801,8 @@ questo caso la titolarit voce nella file table, ma con il valore del \acr{pid} del processo. Quando si richiede un lock il kernel effettua una scansione di tutti i lock -presenti sul file\footnote{scandisce cioè la linked list delle strutture +presenti sul file\footnote{scandisce cioè la + \index{\textit{linked~list}}\textit{linked list} delle strutture \struct{file\_lock}, scartando automaticamente quelle per cui \var{fl\_flags} non è \const{FL\_POSIX}, così che le due interfacce restano ben separate.} per verificare se la regione richiesta non si sovrappone ad