Trattazione unont 2 e correzione varie indicizzazioni e
authorSimone Piccardi <piccardi@gnulinux.it>
Wed, 18 Jan 2012 00:04:51 +0000 (00:04 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Wed, 18 Jan 2012 00:04:51 +0000 (00:04 +0000)
uniformizzazione della scrittura di pathname

15 files changed:
errors.tex
fileadv.tex
filedir.tex
filestd.tex
fileunix.tex
intro.tex
ipc.tex
macro.tex
process.tex
prochand.tex
session.tex
signal.tex
socket.tex
system.tex
tcpsock.tex

index 7cf46fc6c397987161df56deef30d6ef3870a7b8..60b4bde027cb967545994899f0165b01fdb5b3b6 100644 (file)
@@ -41,10 +41,9 @@ gestione dei file.
   permessa: solo il proprietario del file o un processo con sufficienti
   privilegi può eseguire l'operazione.
 \item[\errcode{ENOENT} \textit{No such file or directory}.] Il file indicato
   permessa: solo il proprietario del file o un processo con sufficienti
   privilegi può eseguire l'operazione.
 \item[\errcode{ENOENT} \textit{No such file or directory}.] Il file indicato
-  dal \itindex{pathname} \textit{pathname} non esiste: o una delle componenti
-  non esiste o il \textit{pathname} contiene un link simbolico spezzato.
-  Errore tipico di un riferimento ad un file che si suppone erroneamente
-  essere esistente.
+  dal \textit{pathname} non esiste: o una delle componenti non esiste o il
+  \textit{pathname} contiene un link simbolico spezzato.  Errore tipico di un
+  riferimento ad un file che si suppone erroneamente essere esistente.
 \item[\errcode{EIO} \textit{Input/output error}.] Errore di input/output:
   usato per riportare errori hardware in lettura/scrittura su un dispositivo.
 \item[\errcode{ENXIO} \textit{No such device or address}.] Dispositivo
 \item[\errcode{EIO} \textit{Input/output error}.] Errore di input/output:
   usato per riportare errori hardware in lettura/scrittura su un dispositivo.
 \item[\errcode{ENXIO} \textit{No such device or address}.] Dispositivo
@@ -63,11 +62,9 @@ gestione dei file.
   al file o alla directory non è consentito: i permessi del file o della
   directory non consentono l'operazione richiesta.
 \item[\errcode{ELOOP} \textit{Too many symbolic links encountered}.] Ci sono
   al file o alla directory non è consentito: i permessi del file o della
   directory non consentono l'operazione richiesta.
 \item[\errcode{ELOOP} \textit{Too many symbolic links encountered}.] Ci sono
-  troppi link simbolici nella risoluzione di un
-  \itindex{pathname} \textit{pathname}.
+  troppi link simbolici nella risoluzione di un \textit{pathname}.
 \item[\errcode{ENAMETOOLONG} \textit{File name too long}.] Si è indicato un
 \item[\errcode{ENAMETOOLONG} \textit{File name too long}.] Si è indicato un
-  \itindex{pathname} \textit{pathname} troppo lungo per un file o una
-  directory.
+  \textit{pathname} troppo lungo per un file o una directory.
 \item[\errcode{ENOTBLK} \textit{Block device required}.] Si è specificato un
   file che non è un \textit{block device} in un contesto in cui era necessario
   specificare un \textit{block device} (ad esempio si è tentato di montare un
 \item[\errcode{ENOTBLK} \textit{Block device required}.] Si è specificato un
   file che non è un \textit{block device} in un contesto in cui era necessario
   specificare un \textit{block device} (ad esempio si è tentato di montare un
@@ -106,15 +103,15 @@ gestione dei file.
 \item[\errcode{ENOSPC} \textit{No space left on device}.] La directory in cui
   si vuole creare il link non ha spazio per ulteriori voci, o si è cercato di
   scrivere o di creare un nuovo file su un dispositivo che è già pieno.
 \item[\errcode{ENOSPC} \textit{No space left on device}.] La directory in cui
   si vuole creare il link non ha spazio per ulteriori voci, o si è cercato di
   scrivere o di creare un nuovo file su un dispositivo che è già pieno.
-\item[\errcode{ESPIPE} \textit{Invalid seek operation}.] Si cercato di eseguire
-  una \func{seek} su un file che non supporta questa operazione (ad esempio su
-  una pipe). 
+\item[\errcode{ESPIPE} \textit{Invalid seek operation}.] Si cercato di
+  eseguire una \func{lseek} su un file che non supporta questa operazione (ad
+  esempio su una \textit{pipe}, da cui il nome).
 \item[\errcode{EROFS} \textit{Read-only file system}.]  Si è cercato di
   eseguire una operazione di scrittura su un file o una directory che risiede
   su un filesystem montato un sola lettura.
 \item[\errcode{EROFS} \textit{Read-only file system}.]  Si è cercato di
   eseguire una operazione di scrittura su un file o una directory che risiede
   su un filesystem montato un sola lettura.
-\item[\errcode{EMLINK} \textit{Too many links}]. Ci sono già troppi link al
-  file (il numero massimo è specificato dalla variabile \const{LINK\_MAX},
-  vedi sez.~\ref{sec:sys_limits}).
+\item[\errcode{EMLINK} \textit{Too many links}.] Ci sono già troppi link al
+  fileil numero massimo è specificato dalla variabile \const{LINK\_MAX},
+  vedi sez.~\ref{sec:sys_limits}.
 \item[\errcode{EPIPE} \textit{Broken pipe}.] Non c'è un processo che stia
   leggendo l'altro capo della pipe. Ogni funzione che restituisce questo
   errore genera anche un segnale \signal{SIGPIPE}, la cui azione predefinita è
 \item[\errcode{EPIPE} \textit{Broken pipe}.] Non c'è un processo che stia
   leggendo l'altro capo della pipe. Ogni funzione che restituisce questo
   errore genera anche un segnale \signal{SIGPIPE}, la cui azione predefinita è
index b35d14c1e4a5be77613082b59797b32fe8793ee4..8d6277219cf18fc53843330ba217156467d35854 100644 (file)
@@ -1714,12 +1714,14 @@ l'insieme dei file descriptor da tenere sotto controllo tramite un certo
   chiamate devono essere ripetute per ciascun file descriptor, incorrendo in
   una perdita di prestazioni qualora il numero di file descriptor sia molto
   grande; per questo è stato proposto di introdurre come estensione una
   chiamate devono essere ripetute per ciascun file descriptor, incorrendo in
   una perdita di prestazioni qualora il numero di file descriptor sia molto
   grande; per questo è stato proposto di introdurre come estensione una
-  funzione \func{epoll\_ctlv} che consenta di effettuare con una sola chiamata
+  funzione \code{epoll\_ctlv} che consenta di effettuare con una sola chiamata
   le impostazioni per un blocco di file descriptor.} L'uso di
 \const{EPOLL\_CTL\_MOD} consente in seguito di modificare le modalità di
 osservazione di un file descriptor che sia già stato aggiunto alla lista di
 osservazione.
 
   le impostazioni per un blocco di file descriptor.} L'uso di
 \const{EPOLL\_CTL\_MOD} consente in seguito di modificare le modalità di
 osservazione di un file descriptor che sia già stato aggiunto alla lista di
 osservazione.
 
+% TODO verificare se prima o poi epoll_ctlv verrà introdotta
+
 Le impostazioni di default prevedono che la notifica degli eventi richiesti
 sia effettuata in modalità \textit{level triggered}, a meno che sul file
 descriptor non si sia impostata la modalità \textit{edge triggered},
 Le impostazioni di default prevedono che la notifica degli eventi richiesti
 sia effettuata in modalità \textit{level triggered}, a meno che sul file
 descriptor non si sia impostata la modalità \textit{edge triggered},
@@ -3167,15 +3169,15 @@ così all'applicazione di collegare la corrispondente coppia di eventi
 Infine due campi \var{name} e \var{len} sono utilizzati soltanto quando
 l'evento è relativo ad un file presente in una directory posta sotto
 osservazione, in tal caso essi contengono rispettivamente il nome del file
 Infine due campi \var{name} e \var{len} sono utilizzati soltanto quando
 l'evento è relativo ad un file presente in una directory posta sotto
 osservazione, in tal caso essi contengono rispettivamente il nome del file
-(come pathname relativo alla directory osservata) e la relativa dimensione in
-byte. Il campo \var{name} viene sempre restituito come stringa terminata da
-NUL, con uno o più zeri di terminazione, a seconda di eventuali necessità di
-allineamento del risultato, ed il valore di \var{len} corrisponde al totale
-della dimensione di \var{name}, zeri aggiuntivi compresi. La stringa con il
-nome del file viene restituita nella lettura subito dopo la struttura
-\struct{inotify\_event}; questo significa che le dimensioni di ciascun evento
-di \textit{inotify} saranno pari a \code{sizeof(\struct{inotify\_event}) +
-  len}.
+(come \itindsub{pathname}{relativo} \textit{pathname} relativo alla directory
+osservata) e la relativa dimensione in byte. Il campo \var{name} viene sempre
+restituito come stringa terminata da NUL, con uno o più zeri di terminazione,
+a seconda di eventuali necessità di allineamento del risultato, ed il valore
+di \var{len} corrisponde al totale della dimensione di \var{name}, zeri
+aggiuntivi compresi. La stringa con il nome del file viene restituita nella
+lettura subito dopo la struttura \struct{inotify\_event}; questo significa che
+le dimensioni di ciascun evento di \textit{inotify} saranno pari a
+\code{sizeof(\struct{inotify\_event}) + len}.
 
 Vediamo allora un esempio dell'uso dell'interfaccia di \textit{inotify} con un
 semplice programma che permette di mettere sotto osservazione uno o più file e
 
 Vediamo allora un esempio dell'uso dell'interfaccia di \textit{inotify} con un
 semplice programma che permette di mettere sotto osservazione uno o più file e
@@ -4737,7 +4739,7 @@ definito la macro \macro{\_GNU\_SOURCE},\footnote{si ricordi che questa
       \func{splice}, oppure nessuno dei file descriptor è una pipe, oppure si
       è dato un valore a \param{off\_in} o \param{off\_out} ma il
       corrispondente file è un dispositivo che non supporta la funzione
       \func{splice}, oppure nessuno dei file descriptor è una pipe, oppure si
       è dato un valore a \param{off\_in} o \param{off\_out} ma il
       corrispondente file è un dispositivo che non supporta la funzione
-      \func{seek}.
+      \func{lseek}.
     \item[\errcode{ENOMEM}] non c'è memoria sufficiente per l'operazione
       richiesta.
     \item[\errcode{ESPIPE}] o \param{off\_in} o \param{off\_out} non sono
     \item[\errcode{ENOMEM}] non c'è memoria sufficiente per l'operazione
       richiesta.
     \item[\errcode{ESPIPE}] o \param{off\_in} o \param{off\_out} non sono
index ac07597e75951f2433f9dab94a48da0fc4f68c5c..2fbda9fa35ea0bdd0c9987a51d832f8c025e2e94 100644 (file)
@@ -100,6 +100,7 @@ relativi campi con i dati specifici di quel filesystem, ed in particolare si
 dovrà creare anche la relativa versione della funzione \code{mount}.
 
 \itindbeg{pathname}
 dovrà creare anche la relativa versione della funzione \code{mount}.
 
 \itindbeg{pathname}
+\itindbeg{pathname!resolution}
 
 Come illustrato in fig.~\ref{fig:kstruct_file_system_type} questa funzione
 restituisce una \textit{dentry}, abbreviazione che sta per \textit{directory
 
 Come illustrato in fig.~\ref{fig:kstruct_file_system_type} questa funzione
 restituisce una \textit{dentry}, abbreviazione che sta per \textit{directory
@@ -145,6 +146,7 @@ filesystem, e come vedremo questo farà sì che venga eseguita una
 filesystem.
 
 \itindend{pathname}
 filesystem.
 
 \itindend{pathname}
+\itindend{pathname!resolution}
 
 % Un secondo effetto della chiamata funzione \texttt{mount} di
 % \kstruct{file\_system\_type} è quello di allocare una struttura
 
 % Un secondo effetto della chiamata funzione \texttt{mount} di
 % \kstruct{file\_system\_type} è quello di allocare una struttura
@@ -608,9 +610,10 @@ indicizzazione tramite hash al posto delle \textit{linked list} che abbiamo
 illustrato, ottenendo un forte guadagno di prestazioni in caso di directory
 contenenti un gran numero di file.
 
 illustrato, ottenendo un forte guadagno di prestazioni in caso di directory
 contenenti un gran numero di file.
 
-% TODO portare a ext3, ext4 e btrfs ed illustrare le problematiche che si
-% possono incontrare (in particolare quelle relative alla perdita di contenuti
-% in caso di crash del sistema)
+% TODO (bassa priorità) portare a ext3, ext4 e btrfs ed illustrare le
+% problematiche che si possono incontrare (in particolare quelle relative alla
+% perdita di contenuti in caso di crash del sistema)
+% TODO (media priorità) trattare btrfs quando sarà usato come stabile
 
 
 \subsection{La gestione dell'uso dei filesystem}
 
 
 \subsection{La gestione dell'uso dei filesystem}
@@ -635,10 +638,10 @@ il cui prototipo è:\footnote{la funzione è una versione specifica di Linux che
   caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\errcode{EACCES}] non si ha il permesso di accesso su uno dei
   caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\errcode{EACCES}] non si ha il permesso di accesso su uno dei
-    componenti del \itindex{pathname} \textit{pathname}, o si è cercato di
-    montare un filesystem disponibile in sola lettura senza aver specificato
-    \const{MS\_RDONLY} o il device \param{source} è su un filesystem montato
-    con l'opzione \const{MS\_NODEV}.
+    componenti del \textit{pathname}, o si è cercato di montare un filesystem
+    disponibile in sola lettura senza aver specificato \const{MS\_RDONLY} o il
+    device \param{source} è su un filesystem montato con l'opzione
+    \const{MS\_NODEV}.
   \item[\errcode{EBUSY}] \param{source} è già montato, o non può essere
     rimontato in sola lettura perché ci sono ancora file aperti in scrittura,
     o non può essere montato su \param{target} perché la directory è ancora in
   \item[\errcode{EBUSY}] \param{source} è già montato, o non può essere
     rimontato in sola lettura perché ci sono ancora file aperti in scrittura,
     o non può essere montato su \param{target} perché la directory è ancora in
@@ -651,7 +654,7 @@ il cui prototipo è:\footnote{la funzione è una versione specifica di Linux che
     \textit{mount point} o è la radice.
   \item[\errcode{ELOOP}] si è cercato di spostare un \itindex{mount~point}
     \textit{mount point} su una sottodirectory di \param{source} o si sono
     \textit{mount point} o è la radice.
   \item[\errcode{ELOOP}] si è cercato di spostare un \itindex{mount~point}
     \textit{mount point} su una sottodirectory di \param{source} o si sono
-    incontrati troppi link simolici nella risoluzione di un nome.
+    incontrati troppi link simbolici nella risoluzione di un nome.
   \item[\errcode{EMFILE}] in caso di filesystem virtuale, la tabella dei
     dispositivi fittizi (chiamati \textit{dummy} nella documentazione inglese)
     è piena.
   \item[\errcode{EMFILE}] in caso di filesystem virtuale, la tabella dei
     dispositivi fittizi (chiamati \textit{dummy} nella documentazione inglese)
     è piena.
@@ -672,8 +675,7 @@ La funzione monta sulla directory indicata da \param{target}, detta
 di dispositivo indicato da \param{source}. In entrambi i casi, come daremo per
 assunto da qui in avanti tutte le volte che si parla di directory o file nel
 passaggio di un argomento di una funzione, si intende che questi devono essere
 di dispositivo indicato da \param{source}. In entrambi i casi, come daremo per
 assunto da qui in avanti tutte le volte che si parla di directory o file nel
 passaggio di un argomento di una funzione, si intende che questi devono essere
-indicati con la stringa contenente il loro \itindex{pathname}
-\textit{pathname}.
+indicati con la stringa contenente il loro \textit{pathname}.
 
 Normalmente un filesystem è contenuto su un disco o una partizione, ma come
 illustrato in sez.~\ref{sec:file_vfs_work} la struttura del
 
 Normalmente un filesystem è contenuto su un disco o una partizione, ma come
 illustrato in sez.~\ref{sec:file_vfs_work} la struttura del
@@ -707,7 +709,7 @@ Dopo l'esecuzione della funzione il contenuto del filesystem viene resto
 disponibile nella directory specificata come \itindex{mount~point}
 \textit{mount point}, il precedente contenuto di detta directory viene
 mascherato dal contenuto della directory radice del filesystem montato. Fino
 disponibile nella directory specificata come \itindex{mount~point}
 \textit{mount point}, il precedente contenuto di detta directory viene
 mascherato dal contenuto della directory radice del filesystem montato. Fino
-ai kernel della serie 2.2.x non era possibile montare un filesytem se un
+ai kernel della serie 2.2.x non era possibile montare un filesystem se un
 \textit{mount point} era già in uso. 
 
 A partire dal kernel 2.4.x inoltre è divenuto possibile sia spostare
 \textit{mount point} era già in uso. 
 
 A partire dal kernel 2.4.x inoltre è divenuto possibile sia spostare
@@ -751,9 +753,9 @@ identificati dalle costanti riportate nell'elenco seguente:
   effettuato il \textit{bind mount}. Gli argomenti \param{filesystemtype}
   e \param{data} vengono ignorati.
 
   effettuato il \textit{bind mount}. Gli argomenti \param{filesystemtype}
   e \param{data} vengono ignorati.
 
-  In sostanza quello che avviene è che in corrispondenza del \index{pathname}
-  \textit{pathname} indicato da \param{target} viene montato l'\textit{inode}
-  di \param{source}, così che la porzione di albero dei file presente sotto
+  In sostanza quello che avviene è che in corrispondenza del \textit{pathname}
+  indicato da \param{target} viene montato l'\textit{inode} di \param{source},
+  così che la porzione di albero dei file presente sotto
   \param{source} diventi visibile allo stesso modo sotto
   \param{target}. Trattandosi esattamente dei dati dello stesso filesystem,
   ogni modifica fatta in uno qualunque dei due rami di albero sarà visibile
   \param{source} diventi visibile allo stesso modo sotto
   \param{target}. Trattandosi esattamente dei dati dello stesso filesystem,
   ogni modifica fatta in uno qualunque dei due rami di albero sarà visibile
@@ -762,7 +764,7 @@ identificati dalle costanti riportate nell'elenco seguente:
 
   Dal punto di vista del \itindex{Virtual~File~System} VFS l'operazione è
   analoga al montaggio di un filesystem proprio nel fatto che anche in questo
 
   Dal punto di vista del \itindex{Virtual~File~System} VFS l'operazione è
   analoga al montaggio di un filesystem proprio nel fatto che anche in questo
-  caso si inserisce in corripondenza della \textit{dentry} di \texttt{target}
+  caso si inserisce in corrispondenza della \textit{dentry} di \texttt{target}
   un diverso \textit{inode}, che stavolta, invece di essere quello della
   radice del filesystem indicato da un file di dispositivo, è quello di una
   directory già montata.
   un diverso \textit{inode}, che stavolta, invece di essere quello della
   radice del filesystem indicato da un file di dispositivo, è quello di una
   directory già montata.
@@ -829,10 +831,11 @@ identificati dalle costanti riportate nell'elenco seguente:
   vengono ignorati.
 
   Lo spostamento avviene atomicamente, ed il ramo di albero presente
   vengono ignorati.
 
   Lo spostamento avviene atomicamente, ed il ramo di albero presente
-  sotto \param{source} sarà immediatamante visibile sotto \param{target}. Non
+  sotto \param{source} sarà immediatamente visibile sotto \param{target}. Non
   esiste cioè nessun momento in cui il filesystem non risulti montato in una o
   nell'altra directory e pertanto è garantito che la risoluzione di
   esiste cioè nessun momento in cui il filesystem non risulti montato in una o
   nell'altra directory e pertanto è garantito che la risoluzione di
-  \textit{pathname} relativi all'interno del filesystem non possa fallire.
+  \itindsub{pathname}{relativo} \textit{pathname} relativi all'interno del
+  filesystem non possa fallire.
 
 \item[\const{MS\_NOATIME}] Viene disabilitato sul filesystem l'aggiornamento
   degli \textit{access time} (vedi sez.~\ref{sec:file_file_times}) per
 
 \item[\const{MS\_NOATIME}] Viene disabilitato sul filesystem l'aggiornamento
   degli \textit{access time} (vedi sez.~\ref{sec:file_file_times}) per
@@ -935,7 +938,7 @@ identificati dalle costanti riportate nell'elenco seguente:
 
 \item[\const{MS\_RELATIME}] Indica di effettuare l'aggiornamento degli
   \textit{access time} sul filesystem soltanto quando questo risulti
 
 \item[\const{MS\_RELATIME}] Indica di effettuare l'aggiornamento degli
   \textit{access time} sul filesystem soltanto quando questo risulti
-  antecendente il valore corrente del \textit{modification time} o del
+  antecedente il valore corrente del \textit{modification time} o del
   \textit{change time} (per i tempi dei file si veda
   sez.~\ref{sec:file_file_times}). L'opzione è disponibile a partire dal
   kernel 2.6.20, mentre dal 2.6.30 questo è diventato il comportamento di
   \textit{change time} (per i tempi dei file si veda
   sez.~\ref{sec:file_file_times}). L'opzione è disponibile a partire dal
   kernel 2.6.20, mentre dal 2.6.30 questo è diventato il comportamento di
@@ -1066,7 +1069,7 @@ identificati dalle costanti riportate nell'elenco seguente:
 
 
 Una volta che non si voglia più utilizzare un certo filesystem è possibile
 
 
 Una volta che non si voglia più utilizzare un certo filesystem è possibile
-\textsl{smontarlo} usando la funzione \funcd{umount}, il cui prototipo è:
+``\textsl{smontarlo}'' usando la funzione \funcd{umount}, il cui prototipo è:
 
 \begin{funcproto}{ 
 \fhead{sys/mount.h}
 
 \begin{funcproto}{ 
 \fhead{sys/mount.h}
@@ -1076,16 +1079,18 @@ Una volta che non si voglia più utilizzare un certo filesystem è possibile
 {La funzione ritorna  $0$ in caso di successo e $-1$ per un errore,
   nel qual caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
 {La funzione ritorna  $0$ in caso di successo e $-1$ per un errore,
   nel qual caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
-  \item[\errcode{EBUSY}] \param{target} è la \index{directory~di~lavoro}
-    directory di lavoro di qualche processo, o contiene dei file aperti, o un
-    altro mount point.
+  \item[\errcode{EBUSY}] il filesystem è occupato.
   \item[\errcode{EINVAL}] \param{target} non è un \textit{mount point}.
   \item[\errcode{EINVAL}] \param{target} non è un \textit{mount point}.
-  \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
+  \item[\errcode{EPERM}] il processo non ha i privilegi di
+    amministratore.\footnotemark 
   \end{errlist}
   ed inoltre \errval{EFAULT}, \errval{ELOOP}, \errval{ENAMETOOLONG},
   \errval{ENOENT}, \errval{ENOMEM} nel loro significato generico.  }
 \end{funcproto}
 
   \end{errlist}
   ed inoltre \errval{EFAULT}, \errval{ELOOP}, \errval{ENAMETOOLONG},
   \errval{ENOENT}, \errval{ENOMEM} nel loro significato generico.  }
 \end{funcproto}
 
+\footnotetext{più precisamente la \itindex{capabilities} capacità
+  \texttt{CAP\_SYS\_ADMIN}.}
+
 La funzione prende il nome della directory su cui il filesystem è montato e
 non il file o il dispositivo che è stato montato,\footnote{questo è vero a
   partire dal kernel 2.3.99-pre7, prima esistevano due chiamate separate e la
 La funzione prende il nome della directory su cui il filesystem è montato e
 non il file o il dispositivo che è stato montato,\footnote{questo è vero a
   partire dal kernel 2.3.99-pre7, prima esistevano due chiamate separate e la
@@ -1094,10 +1099,10 @@ quanto a partire dai kernel della serie 2.4.x è possibile montare lo stesso
 dispositivo in più punti. Nel caso più di un filesystem sia stato montato
 sullo stesso \itindex{mount~point} \textit{mount point} viene smontato quello
 che è stato montato per ultimo. Si tenga presente che la funzione fallisce se
 dispositivo in più punti. Nel caso più di un filesystem sia stato montato
 sullo stesso \itindex{mount~point} \textit{mount point} viene smontato quello
 che è stato montato per ultimo. Si tenga presente che la funzione fallisce se
-il filesystem è \textsl{occupato}, cioè quando se ci sono ancora dei file
+il filesystem è ``\textsl{occupato}'', cioè quando ci sono ancora dei file
 aperti sul filesystem, se questo contiene la \index{directory~di~lavoro}
 aperti sul filesystem, se questo contiene la \index{directory~di~lavoro}
-directory di lavoro corrente di un qualunque processo o il
-\itindex{mount~point} \textit{mount point} di un altro filesystem.
+directory di lavoro di un qualunque processo o il \itindex{mount~point}
+\textit{mount point} di un altro filesystem.
 
 Linux provvede inoltre una seconda funzione, \funcd{umount2}, che consente un
 maggior controllo delle operazioni, come forzare lo smontaggio di un
 
 Linux provvede inoltre una seconda funzione, \funcd{umount2}, che consente un
 maggior controllo delle operazioni, come forzare lo smontaggio di un
@@ -1111,20 +1116,27 @@ filesystem anche quando questo risulti occupato; il suo prototipo è:
 {La funzione ritorna  $0$ in caso di successo e $-1$ per un errore,
   nel qual caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
 {La funzione ritorna  $0$ in caso di successo e $-1$ per un errore,
   nel qual caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
-     \item[\errcode{EAGAIN}] 
-     \item[\errcode{EINVAL}]
+     \item[\errcode{BUSY}] \param{target} è la \index{directory~di~lavoro}
+       directory di lavoro di qualche processo, o contiene dei file aperti, o un
+       altro mount point.
+     \item[\errcode{EAGAIN}] si è chiamata la funzione con \const{MNT\_EXPIRE}
+       ed il filesystem non era occupato.
+     \item[\errcode{EINVAL}] \param{target} non è un \itindex{mount~point}
+       \textit{mount point} o si è usato \const{MNT\_EXPIRE} con
+       \const{MNT\_FORCE} o \const{MNT\_DETACH} o si è specificato un flag non
+       esistente.
   \end{errlist}
   \end{errlist}
-  e gli altri valori visti per \func{umount} con lo stesso signigicato.
-}
+  e tutti gli altri valori visti per \func{umount} con lo stesso significato.}
 \end{funcproto}
 
 \end{funcproto}
 
-Il valore di \param{flags} è una maschera binaria, che deve essere specificato
-con un OR aritmetico dei valori illustrate in tab.~\ref{tab:umount2_flags}.
-Specificando \const{MNT\_FORCE} la funzione cercherà di liberare il filesystem
-anche se è occupato per via di una delle condizioni descritte in precedenza. A
-seconda del tipo di filesystem alcune (o tutte) possono essere superate,
-evitando l'errore di \errcode{EBUSY}.  In tutti i casi prima dello smontaggio
-viene eseguita una sincronizzazione dei dati.
+Il valore di \param{flags} è una maschera binaria dei flag che controllano le
+modalità di smontaggio, che deve essere specificato con un OR aritmetico delle
+costanti illustrate in tab.~\ref{tab:umount2_flags}.  Specificando
+\const{MNT\_FORCE} la funzione cercherà di liberare il filesystem anche se è
+occupato per via di una delle condizioni descritte in precedenza. A seconda
+del tipo di filesystem alcune (o tutte) possono essere superate, evitando
+l'errore di \errcode{EBUSY}. In tutti i casi prima dello smontaggio viene
+eseguita una sincronizzazione dei dati.
 
 \begin{table}[!htb]
   \centering
 
 \begin{table}[!htb]
   \centering
@@ -1134,10 +1146,21 @@ viene eseguita una sincronizzazione dei dati.
     \textbf{Costante} & \textbf{Descrizione}\\
     \hline
     \hline
     \textbf{Costante} & \textbf{Descrizione}\\
     \hline
     \hline
-    \const{MNT\_FORCE}  & (dal kernel 2.2).\\
-    \const{MNT\_DETACH} & (dal kernel 2.4.11 e dalla \acr{glibc} 2.11).\\
-    \const{MNT\_EXPIRE} & (dal kernel 2.6.8 e dalla \acr{glibc} 2.11).\\
-    \const{UMOUNT\_NOFOLLOW}& (dal kernel 2.6.34).\\
+    \const{MNT\_FORCE}  & forza lo smontaggio del filesystem anche se questo è
+                          occupato (presente dai kernel della serie 2.2).\\
+    \const{MNT\_DETACH} & esegue uno smontaggio ``\textsl{pigro}'', in cui si
+                          blocca l'accesso ma si aspetta che il filesystem si
+                          liberi (presente dal kernel 2.4.11 e dalla
+                          \acr{glibc} 2.11).\\ 
+    \const{MNT\_EXPIRE} & se non occupato marca un \itindex{mount~point} 
+                          \textit{mount point} come ``\textsl{in scadenza}'' in
+                          modo che ad una successiva chiamata senza utilizzo
+                          del filesystem questo venga smontato (presente dal
+                          kernel 2.6.8 e dalla \acr{glibc} 2.11).\\ 
+    \const{UMOUNT\_NOFOLLOW}& non dereferenzia \param{target} se questo è un
+                          link simbolico (vedi sez.~\ref{sec:file_symlink})
+                          evitando problemi di sicurezza (presente dal kernel
+                          2.6.34).\\ 
     \hline
   \end{tabular}
   \caption{Costanti che identificano i bit dell'argomento \param{flags}
     \hline
   \end{tabular}
   \caption{Costanti che identificano i bit dell'argomento \param{flags}
@@ -1145,7 +1168,26 @@ viene eseguita una sincronizzazione dei dati.
   \label{tab:umount2_flags}
 \end{table}
 
   \label{tab:umount2_flags}
 \end{table}
 
-
+Con l'opzione \const{MNT\_DETACH} si richiede invece uno smontaggio
+``\textsl{pigro}'' (o \textit{lazy umount}) in cui il filesystem diventa
+inaccessibile per i nuovi processi subito dopo la chiamata della funzione, ma
+resta accessibile per quelli che lo hanno ancora in uso e non viene smontato
+fintanto che resta occupato.
+
+Con \const{MNT\_EXPIRE}, che non può essere specificato insieme agli altri
+due, si marca il \itindex{mount~point} \textit{mount point} di un filesystem
+non occupato come ``\textsl{in scadenza}'', in tal caso \func{umount2} ritorna
+con un errore di \errcode{EAGAIN}, mentre in caso di filesystem occupato si
+sarebbe ricevuto \errcode{BUSY}.  Una volta marcato, se nel frattempo non
+viene fatto nessun uso del filesystem, ad una successiva chiamata con
+\const{MNT\_EXPIRE} questo verrà smontato. Questo flag consente di realizzare
+un meccanismo che smonti automaticamente i filesystem che restano inutilizzato
+per un certo periodo di tempo.
+
+% Infine il flag \const{UMOUNT\_NOFOLLOW} impedisce l'uso di un link simbolico
+% per \param{target} evitando così che si possano passare ai programmi che
+% effettuano lo smontaggio dei filesystem per i quali è previsto la possibilità
+% di gestione da parte degli utenti con uno programma \acr{sgid} 
 
 Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD,
   ma con una struttura diversa.} utili per ottenere in maniera diretta
 
 Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD,
   ma con una struttura diversa.} utili per ottenere in maniera diretta
@@ -1170,7 +1212,7 @@ informazioni riguardo al filesystem su cui si trova un certo file, sono
 \end{funcproto}
 
 Queste funzioni permettono di ottenere una serie di informazioni generali
 \end{funcproto}
 
 Queste funzioni permettono di ottenere una serie di informazioni generali
-riguardo al filesystem su cui si trova il file specificato; queste vengono
+riguardo al filesystem su cui si trova il file specificato con un ; queste vengono
 restituite all'indirizzo \param{buf} di una struttura \struct{statfs} definita
 come in fig.~\ref{fig:sys_statfs}, ed i campi che sono indefiniti per il
 filesystem in esame sono impostati a zero.  I valori del campo \var{f\_type}
 restituite all'indirizzo \param{buf} di una struttura \struct{statfs} definita
 come in fig.~\ref{fig:sys_statfs}, ed i campi che sono indefiniti per il
 filesystem in esame sono impostati a zero.  I valori del campo \var{f\_type}
@@ -1203,10 +1245,8 @@ semplice invocare direttamente il programma \cmd{mount}, per cui ne
 tralasceremo la trattazione, rimandando al manuale delle \acr{glibc}
 \cite{glibc} per la documentazione completa.
 
 tralasceremo la trattazione, rimandando al manuale delle \acr{glibc}
 \cite{glibc} per la documentazione completa.
 
-% TODO scrivere relativamente alle varie funzioni (getfsent e getmntent &C)
-% TODO documentare swapon e swapoff (man 2 ...)
-
-
+% TODO (bassa priorità) scrivere delle funzioni (getfsent e getmntent &C)
+% TODO (bassa priorità) documentare ? swapon e swapoff (man 2 ...) 
 
 \section{La gestione di file e directory}
 \label{sec:file_dir}
 
 \section{La gestione di file e directory}
 \label{sec:file_dir}
@@ -1281,25 +1321,25 @@ diretto, o \textit{hard link}.  Il prototipo della funzione è il seguente:
 \end{funcproto}
 
 
 \end{funcproto}
 
 
-La funzione crea sul \itindex{pathname} \textit{pathname} \param{newpath} un
-collegamento diretto al file indicato da \param{oldpath}.  Per quanto detto la
-creazione di un nuovo collegamento diretto non copia il contenuto del file, ma
-si limita a creare una voce nella directory specificata da \param{newpath} e
-ad aumentare di uno il numero di riferimenti al file (riportato nel campo
-\var{st\_nlink} della struttura \struct{stat}, vedi sez.~\ref{sec:file_stat})
-aggiungendo il nuovo nome ai precedenti. Si noti che uno stesso file può
-essere così chiamato con vari nomi in diverse directory.
+La funzione crea sul \textit{pathname} \param{newpath} un collegamento diretto
+al file indicato da \param{oldpath}.  Per quanto detto la creazione di un
+nuovo collegamento diretto non copia il contenuto del file, ma si limita a
+creare una voce nella directory specificata da \param{newpath} e ad aumentare
+di uno il numero di riferimenti al file (riportato nel campo \var{st\_nlink}
+della struttura \struct{stat}, vedi sez.~\ref{sec:file_stat}) aggiungendo il
+nuovo nome ai precedenti. Si noti che uno stesso file può essere così chiamato
+con vari nomi in diverse directory.
 
 Per quanto dicevamo in sez.~\ref{sec:file_filesystem} la creazione di un
 
 Per quanto dicevamo in sez.~\ref{sec:file_filesystem} la creazione di un
-collegamento diretto è possibile solo se entrambi i \itindex{pathname}
-\textit{pathname} sono nello stesso filesystem; inoltre il filesystem deve
-supportare i collegamenti diretti (il meccanismo non è disponibile ad esempio
-con il filesystem \acr{vfat} di Windows). In realtà la funzione ha un
-ulteriore requisito, e cioè che non solo che i due file siano sullo stesso
-filesystem, ma anche che si faccia riferimento ad essi sullo stesso
-\itindex{mount~point} \textit{mount point}.\footnote{si tenga presente infatti
-  (vedi sez.~\ref{sec:sys_file_config}) che a partire dal kernel 2.4 uno
-  stesso filesystem può essere montato più volte su directory diverse.}
+collegamento diretto è possibile solo se entrambi i \textit{pathname} sono
+nello stesso filesystem; inoltre il filesystem deve supportare i collegamenti
+diretti (il meccanismo non è disponibile ad esempio con il filesystem
+\acr{vfat} di Windows). In realtà la funzione ha un ulteriore requisito, e
+cioè che non solo che i due file siano sullo stesso filesystem, ma anche che
+si faccia riferimento ad essi sullo stesso \itindex{mount~point} \textit{mount
+  point}.\footnote{si tenga presente infatti (vedi
+  sez.~\ref{sec:sys_file_config}) che a partire dal kernel 2.4 uno stesso
+  filesystem può essere montato più volte su directory diverse.}
 
 La funzione inoltre opera sia sui file ordinari che sugli altri oggetti del
 filesystem, con l'eccezione delle directory. In alcune versioni di Unix solo
 
 La funzione inoltre opera sia sui file ordinari che sugli altri oggetti del
 filesystem, con l'eccezione delle directory. In alcune versioni di Unix solo
@@ -1443,7 +1483,7 @@ a \func{rmdir}; il suo prototipo è:
 \fdesc{Cancella un nome dal filesystem.} 
 }
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 \fdesc{Cancella un nome dal filesystem.} 
 }
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
-  caso \var{errno} assumerà uno dei valori relativi alla chimata utilizzata,
+  caso \var{errno} assumerà uno dei valori relativi alla chiamata utilizzata,
   pertanto si può fare riferimento a quanto illustrato nelle descrizioni di
   \func{unlink} e \func{rmdir}.}
 \end{funcproto}
   pertanto si può fare riferimento a quanto illustrato nelle descrizioni di
   \func{unlink} e \func{rmdir}.}
 \end{funcproto}
@@ -1483,8 +1523,8 @@ nello stesso filesystem) si usa invece la funzione \funcd{rename},\footnote{la
   \item[\errcode{EINVAL}] \param{newpath} contiene un prefisso di
     \param{oldpath} o più in generale si è cercato di creare una directory come
     sotto-directory di se stessa.
   \item[\errcode{EINVAL}] \param{newpath} contiene un prefisso di
     \param{oldpath} o più in generale si è cercato di creare una directory come
     sotto-directory di se stessa.
-  \item[\errcode{ENOTDIR}] uno dei componenti dei \itindex{pathname}
-    \textit{pathname} non è una directory o \param{oldpath} è una directory e
+  \item[\errcode{ENOTDIR}] uno dei componenti dei \textit{pathname} non è una
+    directory o \param{oldpath} è una directory e 
     \param{newpath} esiste e non è una directory.
   \end{errlist} ed inoltre \errval{EACCES}, \errval{EPERM}, \errval{EMLINK},
   \errval{ENOENT}, \errval{ENOMEM}, \errval{EROFS}, \errval{ELOOP} e
     \param{newpath} esiste e non è una directory.
   \end{errlist} ed inoltre \errval{EACCES}, \errval{EPERM}, \errval{EMLINK},
   \errval{ENOENT}, \errval{ENOMEM}, \errval{EROFS}, \errval{ELOOP} e
@@ -1577,13 +1617,12 @@ esso specificato.  La funzione che permette di creare un nuovo link simbolico
   \errval{ENOSPC} e \errval{EIO} nel loro significato generico.}
 \end{funcproto}
 
   \errval{ENOSPC} e \errval{EIO} nel loro significato generico.}
 \end{funcproto}
 
-La funzione crea un nuovo link simbolico con \itindex{pathname}
-\textit{pathname} \param{newpath} che fa riferimento ad \param{oldpath}.  Si
-tenga presente che la funzione non effettua nessun controllo sull'esistenza di
-un file di nome \param{oldpath}, ma si limita ad inserire il
-\itindex{pathname} \textit{pathname} nel link simbolico. Pertanto un link
-simbolico può anche riferirsi ad un file che non esiste: in questo caso si ha
-quello che viene chiamato un \textit{dangling link}, letteralmente un
+La funzione crea un nuovo link simbolico con \textit{pathname} \param{newpath}
+che fa riferimento ad \param{oldpath}.  Si tenga presente che la funzione non
+effettua nessun controllo sull'esistenza di un file di nome \param{oldpath},
+ma si limita ad inserire il \textit{pathname} nel link simbolico. Pertanto un
+link simbolico può anche riferirsi ad un file che non esiste: in questo caso
+si ha quello che viene chiamato un \textit{dangling link}, letteralmente un
 \textsl{link ciondolante}.
 
 Come accennato i link simbolici sono risolti automaticamente dal kernel
 \textsl{link ciondolante}.
 
 Come accennato i link simbolici sono risolti automaticamente dal kernel
@@ -1689,8 +1728,8 @@ directory porterebbe il comando ad esaminare \file{/boot}, \file{/boot/boot},
 \file{/boot/boot/boot} e così via.
 
 Per questo motivo il kernel e le librerie prevedono che nella risoluzione di
 \file{/boot/boot/boot} e così via.
 
 Per questo motivo il kernel e le librerie prevedono che nella risoluzione di
-un \itindex{pathname} \textit{pathname} possano essere seguiti un numero
-limitato di link simbolici, il cui valore limite è specificato dalla costante
+un \textit{pathname} possano essere seguiti un numero limitato di link
+simbolici, il cui valore limite è specificato dalla costante
 \const{MAXSYMLINKS}. Qualora questo limite venga superato viene generato un
 errore ed \var{errno} viene impostata al valore \errcode{ELOOP}.
 
 \const{MAXSYMLINKS}. Qualora questo limite venga superato viene generato un
 errore ed \var{errno} viene impostata al valore \errcode{ELOOP}.
 
@@ -1756,8 +1795,8 @@ una opportuna system call.\footnote{questo è quello che permette anche,
 La funzione crea una nuova directory vuota, che contiene cioè solo le due voci
 standard presenti in ogni directory (cioè ``\file{.}'' e ``\file{..}''), con
 il nome indicato dall'argomento \param{dirname}. Il nome può essere indicato
 La funzione crea una nuova directory vuota, che contiene cioè solo le due voci
 standard presenti in ogni directory (cioè ``\file{.}'' e ``\file{..}''), con
 il nome indicato dall'argomento \param{dirname}. Il nome può essere indicato
-sia come \itindex{pathname} \textit{pathname} assoluto che come
-\itindex{pathname} \textit{pathname} relativo.
+sia come \itindsub{pathname}{assoluto} \textit{pathname} assoluto che come
+\itindsub{pathname}{relativo} \textit{pathname} relativo.
 
 I permessi di accesso (vedi sez.~\ref{sec:file_access_control}) con cui la
 directory viene creata sono specificati dall'argomento \param{mode}, i cui
 
 I permessi di accesso (vedi sez.~\ref{sec:file_access_control}) con cui la
 directory viene creata sono specificati dall'argomento \param{mode}, i cui
@@ -1794,8 +1833,8 @@ La funzione che permette la cancellazione di una directory è invece
 
 La funzione cancella la directory \param{dirname}, che deve essere vuota (la
 directory deve cioè contenere soltanto le due voci standard ``\file{.}'' e
 
 La funzione cancella la directory \param{dirname}, che deve essere vuota (la
 directory deve cioè contenere soltanto le due voci standard ``\file{.}'' e
-``\file{..}'').  Il nome può essere indicato con il \itindex{pathname}
-\textit{pathname} assoluto o relativo.
+``\file{..}'').  Il nome può essere indicato con il \textit{pathname} assoluto
+o relativo.
 
 La modalità con cui avviene la cancellazione è analoga a quella di
 \func{unlink}: fintanto che il numero di link \itindex{inode}
 
 La modalità con cui avviene la cancellazione è analoga a quella di
 \func{unlink}: fintanto che il numero di link \itindex{inode}
@@ -2440,8 +2479,8 @@ chiusura (\texttt{\small 32}) dello stream\footnote{nel nostro caso, uscendo
 \subsection{La directory di lavoro}
 \label{sec:file_work_dir}
 
 \subsection{La directory di lavoro}
 \label{sec:file_work_dir}
 
-\itindbeg{pathname}
 \index{directory~di~lavoro|(} 
 \index{directory~di~lavoro|(} 
+
 Come accennato in sez.~\ref{sec:proc_fork} a ciascun processo è associata una
 directory nel filesystem,\footnote{questa viene mantenuta all'interno dei dati
   della sua \struct{task\_struct} (vedi fig.~\ref{fig:proc_task_struct}), più
 Come accennato in sez.~\ref{sec:proc_fork} a ciascun processo è associata una
 directory nel filesystem,\footnote{questa viene mantenuta all'interno dei dati
   della sua \struct{task\_struct} (vedi fig.~\ref{fig:proc_task_struct}), più
@@ -2561,7 +2600,6 @@ possibile (tutti gli altri sarebbero occorsi all'apertura di \param{fd}), è
 quello in cui il processo non ha il permesso di accesso alla directory
 specificata da \param{fd}.
 
 quello in cui il processo non ha il permesso di accesso alla directory
 specificata da \param{fd}.
 
-\itindend{pathname}
 \index{directory~di~lavoro|)} 
 
 
 \index{directory~di~lavoro|)} 
 
 
@@ -2792,13 +2830,13 @@ funzioni \funcd{stat}, \funcd{fstat} e \funcd{lstat}, i cui prototipi sono:
     \errval{EACCES}, \errval{ENOMEM}, \errval{ENAMETOOLONG}.}
 \end{functions}
 
     \errval{EACCES}, \errval{ENOMEM}, \errval{ENAMETOOLONG}.}
 \end{functions}
 
-La funzione \func{stat} legge le informazioni del file il cui pathname è
-specificato dalla stringa puntata da \param{file\_name} e le inserisce nel
-buffer puntato dall'argomento \param{buf}; la funzione \func{lstat} è identica
-a \func{stat} eccetto che se \param{file\_name} è un link simbolico vengono
-lette le informazioni relative ad esso e non al file a cui fa
-riferimento. Infine \func{fstat} esegue la stessa operazione su un file già
-aperto, specificato tramite il suo file descriptor \param{filedes}.
+La funzione \func{stat} legge le informazioni del file il cui
+\textit{pathname} è specificato dalla stringa puntata da \param{file\_name} e
+le inserisce nel buffer puntato dall'argomento \param{buf}; la funzione
+\func{lstat} è identica a \func{stat} eccetto che se \param{file\_name} è un
+link simbolico vengono lette le informazioni relative ad esso e non al file a
+cui fa riferimento. Infine \func{fstat} esegue la stessa operazione su un file
+già aperto, specificato tramite il suo file descriptor \param{filedes}.
 
 La struttura \struct{stat} usata da queste funzioni è definita nell'header
 \headfile{sys/stat.h} e in generale dipende dall'implementazione; la versione
 
 La struttura \struct{stat} usata da queste funzioni è definita nell'header
 \headfile{sys/stat.h} e in generale dipende dall'implementazione; la versione
@@ -2927,8 +2965,8 @@ poi si effettua il confronto con la combinazione di tipi scelta.
 
 Il campo \var{st\_size} di una struttura \struct{stat} contiene la dimensione
 del file in byte, se si tratta di un file regolare. Nel caso di un link
 
 Il campo \var{st\_size} di una struttura \struct{stat} contiene la dimensione
 del file in byte, se si tratta di un file regolare. Nel caso di un link
-simbolico la dimensione è quella del \itindex{pathname} \textit{pathname} che
-il link stesso contiene; per le fifo questo campo è sempre nullo.
+simbolico la dimensione è quella del \textit{pathname} che il link stesso
+contiene; per le fifo questo campo è sempre nullo.
 
 Il campo \var{st\_blocks} definisce la lunghezza del file in blocchi di 512
 byte. Il campo \var{st\_blksize} infine definisce la dimensione preferita per
 
 Il campo \var{st\_blocks} definisce la lunghezza del file in blocchi di 512
 byte. Il campo \var{st\_blksize} infine definisce la dimensione preferita per
@@ -2980,8 +3018,7 @@ dimensione si possono usare le due funzioni \funcd{truncate} e
   per \func{truncate} si hanno:
   \begin{errlist}
   \item[\errcode{EACCES}] il file non ha permesso di scrittura o non si ha il
   per \func{truncate} si hanno:
   \begin{errlist}
   \item[\errcode{EACCES}] il file non ha permesso di scrittura o non si ha il
-    permesso di esecuzione una delle directory del \itindex{pathname}
-    \textit{pathname}.
+    permesso di esecuzione una delle directory del \textit{pathname}.
   \item[\errcode{ETXTBSY}] il file è un programma in esecuzione.
   \end{errlist}
   ed anche \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT},
   \item[\errcode{ETXTBSY}] il file è un programma in esecuzione.
   \end{errlist}
   ed anche \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT},
@@ -2990,9 +3027,9 @@ dimensione si possono usare le due funzioni \funcd{truncate} e
 
 Entrambe le funzioni fan sì che la dimensione del file sia troncata ad un
 valore massimo specificato da \param{length}, e si distinguono solo per il
 
 Entrambe le funzioni fan sì che la dimensione del file sia troncata ad un
 valore massimo specificato da \param{length}, e si distinguono solo per il
-fatto che il file viene indicato con il pathname \param{file\_name} per
-\func{truncate} e con il file descriptor \param{fd} per \funcd{ftruncate}; se
-il file è più lungo della lunghezza specificata i dati in eccesso saranno
+fatto che il file viene indicato con il \textit{pathname} \param{file\_name}
+per \func{truncate} e con il file descriptor \param{fd} per \funcd{ftruncate};
+se il file è più lungo della lunghezza specificata i dati in eccesso saranno
 perduti.
 
 Il comportamento in caso di lunghezza inferiore non è specificato e dipende
 perduti.
 
 Il comportamento in caso di lunghezza inferiore non è specificato e dipende
@@ -3380,12 +3417,12 @@ sostanzialmente una estensione di \func{futimes} che consente di specificare i
 tempi con precisione maggiore, la seconda supporta invece, rispetto ad
 \func{utimes}, una sintassi più complessa che, come vedremo in
 sez.~\ref{sec:file_openat} consente una indicazione sicura dei
 tempi con precisione maggiore, la seconda supporta invece, rispetto ad
 \func{utimes}, una sintassi più complessa che, come vedremo in
 sez.~\ref{sec:file_openat} consente una indicazione sicura dei
-\textit{pathname relativi} specificando la directory da usare come riferimento
-in \param{dirfd} e la possibilità di usare \param{flags} per indicare alla
-funzione di dereferenziare o meno i link simbolici; si rimanda pertanto la
-spiegazione del significato degli argomenti aggiuntivi alla trattazione
-generica delle varie funzioni che usano la stessa sintassi, effettuata in
-sez.~\ref{sec:file_openat}.
+\itindsub{pathname}{relativo} \textit{pathname relativi} specificando la
+directory da usare come riferimento in \param{dirfd} e la possibilità di
+usare \param{flags} per indicare alla funzione di dereferenziare o meno i link
+simbolici; si rimanda pertanto la spiegazione del significato degli argomenti
+aggiuntivi alla trattazione generica delle varie funzioni che usano la stessa
+sintassi, effettuata in sez.~\ref{sec:file_openat}.
 
 
 \section{Il controllo di accesso ai file}
 
 
 \section{Il controllo di accesso ai file}
@@ -3506,15 +3543,15 @@ limiteremo ad un riassunto delle regole generali, entrando nei dettagli più
 avanti.
 
 La prima regola è che per poter accedere ad un file attraverso il suo
 avanti.
 
 La prima regola è che per poter accedere ad un file attraverso il suo
-\itindex{pathname} \textit{pathname} occorre il permesso di esecuzione in
-ciascuna delle directory che compongono il \textit{pathname}; lo stesso vale
-per aprire un file nella directory corrente (per la quale appunto serve il
-diritto di esecuzione).
+\textit{pathname} occorre il permesso di esecuzione in ciascuna delle
+directory che compongono il \textit{pathname}; lo stesso vale per aprire un
+file nella directory corrente (per la quale appunto serve il diritto di
+esecuzione).
 
 Per una directory infatti il permesso di esecuzione significa che essa può
 
 Per una directory infatti il permesso di esecuzione significa che essa può
-essere attraversata nella risoluzione del \itindex{pathname}
-\textit{pathname}, ed è distinto dal permesso di lettura che invece implica
-che si può leggere il contenuto della directory.
+essere attraversata nella risoluzione del \textit{pathname}, ed è distinto dal
+permesso di lettura che invece implica che si può leggere il contenuto della
+directory.
 
 Questo significa che se si ha il permesso di esecuzione senza permesso di
 lettura si potrà lo stesso aprire un file in una directory (se si hanno i
 
 Questo significa che se si ha il permesso di esecuzione senza permesso di
 lettura si potrà lo stesso aprire un file in una directory (se si hanno i
@@ -4300,7 +4337,7 @@ tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti casi:
   sicurezza che si sta utilizzando al momento (ciascuno avrà le sue). Se non è
   stato caricato nessun modulo di sicurezza l'accesso in lettura sarà
   consentito a tutti i processi, mentre quello in scrittura solo ai processi
   sicurezza che si sta utilizzando al momento (ciascuno avrà le sue). Se non è
   stato caricato nessun modulo di sicurezza l'accesso in lettura sarà
   consentito a tutti i processi, mentre quello in scrittura solo ai processi
-  con privilegi amministrativi dotati della \index{capabilities}
+  con privilegi amministrativi dotati della \itindex{capabilities}
   \textit{capability} \const{CAP\_SYS\_ADMIN}.
 
 \item[\texttt{system}] Anche l'accesso agli \textit{extended system
   \textit{capability} \const{CAP\_SYS\_ADMIN}.
 
 \item[\texttt{system}] Anche l'accesso agli \textit{extended system
@@ -4310,13 +4347,13 @@ tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti casi:
   lettura ai processi che hanno la capacità di eseguire una ricerca sul file
   (cioè hanno il permesso di lettura sulla directory che contiene il file) ed
   in scrittura al proprietario del file o ai processi dotati della
   lettura ai processi che hanno la capacità di eseguire una ricerca sul file
   (cioè hanno il permesso di lettura sulla directory che contiene il file) ed
   in scrittura al proprietario del file o ai processi dotati della
-  \textit{capability} \index{capabilities} \const{CAP\_FOWNER}.\footnote{vale
-    a dire una politica di accesso analoga a quella impiegata per gli ordinari
-    permessi dei file.}
+  \textit{capability} \itindex{capabilities}
+  \const{CAP\_FOWNER}.\footnote{vale a dire una politica di accesso analoga a
+    quella impiegata per gli ordinari permessi dei file.}
 
 \item[\texttt{trusted}] L'accesso ai \textit{trusted extended attributes}, sia
   per la lettura che per la scrittura, è consentito soltanto ai processi con
 
 \item[\texttt{trusted}] L'accesso ai \textit{trusted extended attributes}, sia
   per la lettura che per la scrittura, è consentito soltanto ai processi con
-  privilegi amministrativi dotati della \index{capabilities}
+  privilegi amministrativi dotati della \itindex{capabilities}
   \textit{capability} \const{CAP\_SYS\_ADMIN}. In questo modo si possono
   utilizzare questi attributi per realizzare in user space dei meccanismi di
   controllo che accedono ad informazioni non disponibili ai processi ordinari.
   \textit{capability} \const{CAP\_SYS\_ADMIN}. In questo modo si possono
   utilizzare questi attributi per realizzare in user space dei meccanismi di
   controllo che accedono ad informazioni non disponibili ai processi ordinari.
@@ -4358,7 +4395,7 @@ tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti casi:
   per evitare eventuali abusi, se una directory ha lo \itindex{sticky~bit}
   \textit{sticky bit} attivo sarà consentito scrivere i suoi \textit{extended
     user attributes} soltanto se si è proprietari della stessa, o si hanno i
   per evitare eventuali abusi, se una directory ha lo \itindex{sticky~bit}
   \textit{sticky bit} attivo sarà consentito scrivere i suoi \textit{extended
     user attributes} soltanto se si è proprietari della stessa, o si hanno i
-  privilegi amministrativi della capability \index{capabilities}
+  privilegi amministrativi della capability \itindex{capabilities}
   \const{CAP\_FOWNER}.
 \end{basedescript}
 
   \const{CAP\_FOWNER}.
 \end{basedescript}
 
@@ -4404,12 +4441,12 @@ simbolico e ad un file descriptor; i rispettivi prototipi sono:
 \end{functions}
 
 Le funzioni \func{getxattr} e \func{lgetxattr} prendono come primo argomento
 \end{functions}
 
 Le funzioni \func{getxattr} e \func{lgetxattr} prendono come primo argomento
-un pathname che indica il file di cui si vuole richiedere un attributo, la
-sola differenza è che la seconda, se il pathname indica un link simbolico,
-restituisce gli attributi di quest'ultimo e non quelli del file a cui esso fa
-riferimento. La funzione \func{fgetxattr} prende invece come primo argomento
-un numero di file descriptor, e richiede gli attributi del file ad esso
-associato.
+un \textit{pathname} che indica il file di cui si vuole richiedere un
+attributo, la sola differenza è che la seconda, se il \textit{pathname} indica
+un link simbolico, restituisce gli attributi di quest'ultimo e non quelli del
+file a cui esso fa riferimento. La funzione \func{fgetxattr} prende invece
+come primo argomento un numero di file descriptor, e richiede gli attributi
+del file ad esso associato.
 
 Tutte e tre le funzioni richiedono di specificare nell'argomento \param{name}
 il nome dell'attributo di cui si vuole ottenere il valore. Il nome deve essere
 
 Tutte e tre le funzioni richiedono di specificare nell'argomento \param{name}
 il nome dell'attributo di cui si vuole ottenere il valore. Il nome deve essere
@@ -4632,7 +4669,7 @@ può impostare una ACL aggiuntiva, detta \textit{default ACL}, che serve ad
 indicare quale dovrà essere la ACL assegnata di default nella creazione di un
 file all'interno della directory stessa. Come avviene per i permessi le ACL
 possono essere impostate solo del proprietario del file, o da un processo con
 indicare quale dovrà essere la ACL assegnata di default nella creazione di un
 file all'interno della directory stessa. Come avviene per i permessi le ACL
 possono essere impostate solo del proprietario del file, o da un processo con
-la capability \index{capabilities} \const{CAP\_FOWNER}.
+la capability \itindex{capabilities} \const{CAP\_FOWNER}.
 
 \begin{table}[htb]
   \centering
 
 \begin{table}[htb]
   \centering
@@ -4940,12 +4977,13 @@ sono:
 
 Le due funzioni ritornano, con un oggetto di tipo \type{acl\_t}, il valore
 della ACL correntemente associata ad un file, che può essere identificato
 
 Le due funzioni ritornano, con un oggetto di tipo \type{acl\_t}, il valore
 della ACL correntemente associata ad un file, che può essere identificato
-tramite un file descriptor usando \func{acl\_get\_fd} o con un pathname usando
-\func{acl\_get\_file}. Nel caso di quest'ultima funzione, che può richiedere
-anche la ACL relativa ad una directory, il secondo argomento \param{type}
-consente di specificare se si vuole ottenere la ACL di default o quella di
-accesso. Questo argomento deve essere di tipo \type{acl\_type\_t} e può
-assumere solo i due valori riportati in tab.~\ref{tab:acl_type}.
+tramite un file descriptor usando \func{acl\_get\_fd} o con un
+\textit{pathname} usando \func{acl\_get\_file}. Nel caso di quest'ultima
+funzione, che può richiedere anche la ACL relativa ad una directory, il
+secondo argomento \param{type} consente di specificare se si vuole ottenere la
+ACL di default o quella di accesso. Questo argomento deve essere di tipo
+\type{acl\_type\_t} e può assumere solo i due valori riportati in
+tab.~\ref{tab:acl_type}.
 
 \begin{table}[htb]
   \centering
 
 \begin{table}[htb]
   \centering
@@ -5272,19 +5310,20 @@ directory, ed il cui prototipo è:
 \end{functions}
 
 La funzione consente di assegnare la ACL contenuta in \param{acl} al file o
 \end{functions}
 
 La funzione consente di assegnare la ACL contenuta in \param{acl} al file o
-alla directory indicate dal pathname \param{path}, mentre con \param{type} si
-indica il tipo di ACL utilizzando le costanti di tab.~\ref{tab:acl_type}, ma
-si tenga presente che le ACL di default possono essere solo impostate
-qualora \param{path} indichi una directory. Inoltre perché la funzione abbia
-successo la ACL dovrà essere valida, e contenere tutti le voci necessarie,
-unica eccezione è quella in cui si specifica una ACL vuota per cancellare la
-ACL di default associata a \func{path}.\footnote{questo però è una estensione
-  della implementazione delle ACL di Linux, la bozza di standard POSIX.1e
-  prevedeva l'uso della apposita funzione \funcd{acl\_delete\_def\_file}, che
-  prende come unico argomento il pathname della directory di cui si vuole
-  cancellare l'ACL di default, per i dettagli si ricorra alla pagina di
-  manuale.}  La seconda funzione che consente di impostare una ACL è
-\funcd{acl\_set\_fd}, ed il suo prototipo è:
+alla directory indicate dal \textit{pathname} \param{path}, mentre
+con \param{type} si indica il tipo di ACL utilizzando le costanti di
+tab.~\ref{tab:acl_type}, ma si tenga presente che le ACL di default possono
+essere solo impostate qualora \param{path} indichi una directory. Inoltre
+perché la funzione abbia successo la ACL dovrà essere valida, e contenere
+tutti le voci necessarie, unica eccezione è quella in cui si specifica una ACL
+vuota per cancellare la ACL di default associata a
+\func{path}.\footnote{questo però è una estensione della implementazione delle
+  ACL di Linux, la bozza di standard POSIX.1e prevedeva l'uso della apposita
+  funzione \funcd{acl\_delete\_def\_file}, che prende come unico argomento il
+  \textit{pathname} della directory di cui si vuole cancellare l'ACL di
+  default, per i dettagli si ricorra alla pagina di manuale.}  La seconda
+funzione che consente di impostare una ACL è \funcd{acl\_set\_fd}, ed il suo
+prototipo è:
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/acl.h}
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/acl.h}
@@ -5464,11 +5503,12 @@ caso \param{type} deve essere rispettivamente \const{USRQUOTA} o
     \hline
     \const{Q\_QUOTAON}  & Attiva l'applicazione delle quote disco per il
                           filesystem indicato da \param{dev}, si deve passare
     \hline
     \const{Q\_QUOTAON}  & Attiva l'applicazione delle quote disco per il
                           filesystem indicato da \param{dev}, si deve passare
-                          in \param{addr} il pathname al file che mantiene le
-                          quote, che deve esistere, e \param{id} deve indicare
-                          la versione del formato con uno dei valori di
-                          tab.~\ref{tab:quotactl_id_format}; l'operazione
-                          richiede i privilegi di amministratore.\\
+                          in \param{addr} il \textit{pathname} al file che
+                          mantiene le quote, che deve esistere, e \param{id}
+                          deve indicare la versione del formato con uno dei
+                          valori di tab.~\ref{tab:quotactl_id_format};
+                          l'operazione richiede i privilegi di
+                          amministratore.\\
     \const{Q\_QUOTAOFF} & Disattiva l'applicazione delle quote disco per il
                           filesystem indicato da \param{dev}, \param{id}
                           e \param{addr} vengono ignorati; l'operazione
     \const{Q\_QUOTAOFF} & Disattiva l'applicazione delle quote disco per il
                           filesystem indicato da \param{dev}, \param{id}
                           e \param{addr} vengono ignorati; l'operazione
@@ -6837,7 +6877,7 @@ con \func{cap\_free}.
 Alle due funzioni citate se ne aggiungono altre due che consentono di
 convertire i valori delle costanti di tab.~\ref{tab:proc_capabilities} nelle
 stringhe usate nelle rispettive rappresentazioni e viceversa. Le due funzioni,
 Alle due funzioni citate se ne aggiungono altre due che consentono di
 convertire i valori delle costanti di tab.~\ref{tab:proc_capabilities} nelle
 stringhe usate nelle rispettive rappresentazioni e viceversa. Le due funzioni,
-\func{cap\_to\_name} e \func{cap\_from\_name}, sono estensioni specifiche di
+\funcd{cap\_to\_name} e \funcd{cap\_from\_name}, sono estensioni specifiche di
 Linux ed i rispettivi prototipi sono:
 \begin{functions}
   \headdecl{sys/capability.h}
 Linux ed i rispettivi prototipi sono:
 \begin{functions}
   \headdecl{sys/capability.h}
@@ -7018,8 +7058,8 @@ specifico di directory rispetto alla quale vengono risolti i
 sia specificato per ogni processo apre allora la possibilità di modificare le
 modalità di risoluzione dei \textit{pathname} assoluti da parte di un processo
 cambiando questa directory, così come si fa coi
 sia specificato per ogni processo apre allora la possibilità di modificare le
 modalità di risoluzione dei \textit{pathname} assoluti da parte di un processo
 cambiando questa directory, così come si fa coi
-\itindsub{pathname}{relativo}\textit{pathname} relativi cambiando la \index{directory~di~lavoro} directory
-di lavoro.
+\itindsub{pathname}{relativo}\textit{pathname} relativi cambiando la
+\index{directory~di~lavoro} directory di lavoro.
 
 Normalmente la directory radice di un processo coincide anche con la radice
 del filesystem usata dal kernel, e dato che il suo valore viene ereditato dal
 
 Normalmente la directory radice di un processo coincide anche con la radice
 del filesystem usata dal kernel, e dato che il suo valore viene ereditato dal
@@ -7152,8 +7192,8 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  Python Truelite Srl quotamodule Repository who nell' dall' KEEP
 % LocalWords:  SECURE KEEPCAPS prctl FIXUP NOROOT LOCKED dell'IPC dell'I IOPRIO
 % LocalWords:  CAPBSET CLASS IDLE dcookie overflow DIFFERS Virtual everything
 % LocalWords:  Python Truelite Srl quotamodule Repository who nell' dall' KEEP
 % LocalWords:  SECURE KEEPCAPS prctl FIXUP NOROOT LOCKED dell'IPC dell'I IOPRIO
 % LocalWords:  CAPBSET CLASS IDLE dcookie overflow DIFFERS Virtual everything
-% LocalWords:  dentry register resolution cache dcache operation llseek poll
-% LocalWords:  multiplexing fsync fasync seek block superblock gapil tex img
+% LocalWords:  dentry register resolution cache dcache operation llseek poll ln
+% LocalWords:  multiplexing fsync fasync seek block superblock gapil tex img du
 % LocalWords:  second linked journaled source filesystemtype unsigned device
 % LocalWords:  mountflags NODEV ENXIO dummy devfs magic MGC RDONLY NOSUID MOVE
 % LocalWords:  NOEXEC SYNCHRONOUS REMOUNT MANDLOCK NODIRATIME umount MNT statfs
 % LocalWords:  second linked journaled source filesystemtype unsigned device
 % LocalWords:  mountflags NODEV ENXIO dummy devfs magic MGC RDONLY NOSUID MOVE
 % LocalWords:  NOEXEC SYNCHRONOUS REMOUNT MANDLOCK NODIRATIME umount MNT statfs
@@ -7163,3 +7203,6 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+% LocalWords:  bind DIRSYNC lsattr Hierarchy FHS SHARED UNBINDABLE shared REC
+% LocalWords:  subtree SILENT log unbindable BUSY EAGAIN EXPIRE DETACH NOFOLLOW
+% LocalWords:  lazy
index 214fb2046721292044a5c27302ae77e3be99399d..d5772ed1e647a1d49af0658819a7add705a42906 100644 (file)
@@ -460,7 +460,7 @@ effettuato ogni volta che si chiama una funzione di libreria.
 Entrambi i flag (di errore e di end-of-file) possono essere cancellati usando
 la funzione \funcd{clearerr}, il cui prototipo è:
 \begin{prototype}{stdio.h}{void clearerr(FILE *stream)}
 Entrambi i flag (di errore e di end-of-file) possono essere cancellati usando
 la funzione \funcd{clearerr}, il cui prototipo è:
 \begin{prototype}{stdio.h}{void clearerr(FILE *stream)}
-  Cancella i flag di errore ed end-of-file di \param{stream}. 
+  Cancella i flag di errore ed \textit{end-of-file} di \param{stream}.
 \end{prototype}
 \noindent in genere si usa questa funzione una volta che si sia identificata e
 corretta la causa di un errore per evitare di mantenere i flag attivi, così da
 \end{prototype}
 \noindent in genere si usa questa funzione una volta che si sia identificata e
 corretta la causa di un errore per evitare di mantenere i flag attivi, così da
@@ -1166,6 +1166,8 @@ inoltre ricordarsi di invocare \func{free} per liberare detto puntatore quando
 la stringa non serve più, onde evitare \itindex{memory~leak} \textit{memory
   leak}.
 
 la stringa non serve più, onde evitare \itindex{memory~leak} \textit{memory
   leak}.
 
+% TODO verificare se mettere prototipi di \func{dprintf} e \func{vdprintf}
+
 Infine una ulteriore estensione GNU definisce le due funzioni \func{dprintf} e
 \func{vdprintf}, che prendono un file descriptor al posto dello
 \textit{stream}. Altre estensioni permettono di scrivere con caratteri
 Infine una ulteriore estensione GNU definisce le due funzioni \func{dprintf} e
 \func{vdprintf}, che prendono un file descriptor al posto dello
 \textit{stream}. Altre estensioni permettono di scrivere con caratteri
@@ -1644,6 +1646,9 @@ con \param{type}, che può essere uno dei seguenti:
   di blocco dello \textit{stream}.
 \end{basedescript}
 
   di blocco dello \textit{stream}.
 \end{basedescript}
 
+% TODO trattare \func{clearerr\_unlocked} 
+
+
 \itindend{thread}
 
 
 \itindend{thread}
 
 
index 796f05284d6fa8575c3812801f83328f5d7ae17f..3f4d4bbf63bdf8aa699865354a4514f78bc335e2 100644 (file)
@@ -189,8 +189,8 @@ usando direttamente le system call del kernel.
 \label{sec:file_open}
 
 La funzione \funcd{open} è la funzione fondamentale per accedere ai file, ed è
 \label{sec:file_open}
 
 La funzione \funcd{open} è la funzione fondamentale per accedere ai file, ed è
-quella che crea l'associazione fra un \itindex{pathname} \textit{pathname} ed
-un \itindex{file~descriptor} file descriptor, il suo prototipo è:
+quella che crea l'associazione fra un \textit{pathname} ed un
+\itindex{file~descriptor} file descriptor, il suo prototipo è:
 \begin{functions}
   \headdecl{sys/types.h}
   \headdecl{sys/stat.h}
 \begin{functions}
   \headdecl{sys/types.h}
   \headdecl{sys/stat.h}
@@ -1127,12 +1127,12 @@ file descriptor libero di valore uguale o maggiore di \param{newfd} (e se
 \label{sec:file_openat}
 
 Un problema che si pone con l'uso della funzione \func{open}, così come per
 \label{sec:file_openat}
 
 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
-\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}.
+molte altre funzioni che accettano come argomenti dei
+\itindsub{pathname}{relativo} \textit{pathname} relativi, è che, quando un
+\textit{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
 
 Inoltre come già accennato, la \index{directory~di~lavoro} directory di lavoro
 corrente è una proprietà del singolo processo; questo significa che quando si
@@ -1146,13 +1146,14 @@ Solaris, a fianco delle normali funzioni che operano sui file (come
 \func{open}, \func{mkdir}, ecc.) sono state introdotte delle ulteriori
 funzioni, dette anche funzioni ``\textit{at}'' in quanto contraddistinte dal
 suffisso \texttt{at}, che permettono l'apertura di un file (o le rispettive
 \func{open}, \func{mkdir}, ecc.) sono state introdotte delle ulteriori
 funzioni, dette anche funzioni ``\textit{at}'' in quanto contraddistinte dal
 suffisso \texttt{at}, che permettono l'apertura di un file (o le rispettive
-altre operazioni) usando un pathname relativo ad una directory
-specificata.\footnote{l'introduzione è avvenuta su proposta dello sviluppatore
-  principale delle \acr{glibc} Urlich Drepper; le corrispondenti system call
-  sono state inserite nel kernel ufficiale a partire dalla versione 2.6.16, in
-  precedenza era disponibile una emulazione che, sia pure con prestazioni
-  inferiori, funzionava facendo ricorso all'uso del filesystem \textit{proc}
-  con l'apertura del file attraverso il riferimento a pathname del tipo di
+altre operazioni) usando un \itindsub{pathname}{relativo} \textit{pathname}
+relativo ad una directory specificata.\footnote{l'introduzione è avvenuta su
+  proposta dello sviluppatore principale delle \acr{glibc} Urlich Drepper; le
+  corrispondenti system call sono state inserite nel kernel ufficiale a
+  partire dalla versione 2.6.16, in precedenza era disponibile una emulazione
+  che, sia pure con prestazioni inferiori, funzionava facendo ricorso all'uso
+  del filesystem \textit{proc} con l'apertura del file attraverso il
+  riferimento a \textit{pathname} del tipo di
   \texttt{/proc/self/fd/dirfd/relative\_path}.} Benché queste funzioni non
 siano presenti negli standard tradizionali esse sono state adottate da vari
 Unix\footnote{oltre a Linux e Solaris sono presenti in vari BSD.} fino ad
   \texttt{/proc/self/fd/dirfd/relative\_path}.} Benché queste funzioni non
 siano presenti negli standard tradizionali esse sono state adottate da vari
 Unix\footnote{oltre a Linux e Solaris sono presenti in vari BSD.} fino ad
@@ -1161,21 +1162,22 @@ POSIX.1; con le \acr{glibc} per l'accesso a queste funzioni è necessario
 definire la macro \macro{\_ATFILE\_SOURCE}.
 
 L'uso di queste funzioni prevede una apertura iniziale della directory che
 definire la macro \macro{\_ATFILE\_SOURCE}.
 
 L'uso di queste funzioni prevede una apertura iniziale della directory che
-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
-  \index{directory~di~lavoro} directory di lavoro diversa per ciascuno di
-  essi.}
+sarà la base della risoluzione dei \itindsub{pathname}{relativo}
+\textit{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 \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
 significativi quando si devono eseguire molte operazioni su sezioni
 dell'albero dei file che prevedono delle gerarchie di sottodirectory molto
 
 Questo metodo, oltre a risolvere i problemi di \itindex{race~condition}
 \textit{race condition}, consente anche di ottenere aumenti di prestazioni
 significativi quando si devono eseguire molte operazioni su sezioni
 dell'albero dei file che prevedono delle gerarchie di sottodirectory molto
-profonde; infatti in questo caso basta eseguire la risoluzione del pathname
-della directory di partenza una sola volta (nell'apertura iniziale) e non
-tutte le volte che si deve accedere a ciascun file che essa contiene.
+profonde; infatti in questo caso basta eseguire la risoluzione del
+\textit{pathname} della directory di partenza una sola volta (nell'apertura
+iniziale) e non tutte le volte che si deve accedere a ciascun file che essa
+contiene.
 
 La sintassi generale di queste nuove funzioni è che esse prevedono come primo
 argomento il file descriptor della directory da usare come base, mentre gli
 
 La sintassi generale di queste nuove funzioni è che esse prevedono come primo
 argomento il file descriptor della directory da usare come base, mentre gli
@@ -1195,16 +1197,19 @@ come:
     errore di \func{open}, ed in più:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
     errore di \func{open}, ed in più:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
-  \item[\errcode{ENOTDIR}] \param{pathname} è un pathname relativo, ma
+  \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
+    \textit{pathname} relativo, ma
     \param{dirfd} fa riferimento ad un file. 
   \end{errlist}}
 \end{functions}
 
 Il comportamento delle nuove funzioni è del tutto analogo a quello delle
 corrispettive classiche, con la sola eccezione del fatto che se fra i loro
     \param{dirfd} fa riferimento ad un file. 
   \end{errlist}}
 \end{functions}
 
 Il comportamento delle nuove funzioni è del tutto analogo a quello delle
 corrispettive classiche, con la sola eccezione del fatto che se fra i loro
-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
+argomenti si utilizza un \itindsub{pathname}{relativo} \textit{pathname}
+relativo questo sarà risolto rispetto alla directory indicata
+da \param{dirfd}; qualora invece si usi un \itindsub{pathname}{assoluto}
+\textit{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 \headfile{fcntl.h},
   pertanto se la si vuole usare occorrerà includere comunque questo file,
 \param{dirfd} si usa il valore speciale \const{AT\_FDCWD},\footnote{questa,
   come le altre costanti \texttt{AT\_*}, è definita in \headfile{fcntl.h},
   pertanto se la si vuole usare occorrerà includere comunque questo file,
@@ -1216,10 +1221,11 @@ Così come il comportamento, anche i valori di ritorno e le condizioni di
 errore delle nuove funzioni sono gli stessi delle funzioni classiche, agli
 errori si aggiungono però quelli dovuti a valori errati per \param{dirfd}; in
 particolare si avrà un errore di \errcode{EBADF} se esso non è un file
 errore delle nuove funzioni sono gli stessi delle funzioni classiche, agli
 errori si aggiungono però quelli dovuti a valori errati per \param{dirfd}; in
 particolare si avrà un errore di \errcode{EBADF} se esso non è un file
-descriptor valido, ed un errore di \errcode{ENOTDIR} se esso non fa riferimento
-ad una directory.\footnote{tranne il caso in cui si sia specificato un
-  pathname assoluto, nel qual caso, come detto, il valore di \param{dirfd}
-  sarà completamente ignorato.}
+descriptor valido, ed un errore di \errcode{ENOTDIR} se esso non fa
+riferimento ad una directory.\footnote{tranne il caso in cui si sia
+  specificato un \itindsub{pathname}{assoluto} \textit{pathname} assoluto, nel
+  qual caso, come detto, il valore di \param{dirfd} sarà completamente
+  ignorato.}
 
 In tab.~\ref{tab:file_atfunc_corr} si sono riportate le funzioni introdotte
 con questa nuova interfaccia, con a fianco la corrispondente funzione
 
 In tab.~\ref{tab:file_atfunc_corr} si sono riportate le funzioni introdotte
 con questa nuova interfaccia, con a fianco la corrispondente funzione
@@ -1266,6 +1272,8 @@ 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.}
 
 \footnotetext{in questo caso l'argomento \param{flags} è disponibile ed
   utilizzabile solo a partire dal kernel 2.6.18.}
 
+% TODO manca prototipo di fchmodat
+
 Per tutte le funzioni che lo prevedono, a parte \func{unlinkat} e
 \funcd{faccessat}, l'ulteriore argomento è stato introdotto solo per fornire
 un meccanismo con cui modificarne il comportamento nel caso si stia operando
 Per tutte le funzioni che lo prevedono, a parte \func{unlinkat} e
 \funcd{faccessat}, l'ulteriore argomento è stato introdotto solo per fornire
 un meccanismo con cui modificarne il comportamento nel caso si stia operando
@@ -1292,8 +1300,8 @@ che \func{lchown}; il suo prototipo è:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
-  \item[\errcode{ENOTDIR}] \param{pathname} è un pathname relativo, ma
-    \param{dirfd} fa riferimento ad un file. 
+  \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
+    \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file. 
   \end{errlist}}
 \end{functions}
 
   \end{errlist}}
 \end{functions}
 
@@ -1322,8 +1330,8 @@ il suo prototipo è:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
-  \item[\errcode{ENOTDIR}] \param{pathname} è un pathname relativo, ma
-    \param{dirfd} fa riferimento ad un file. 
+  \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
+    \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file. 
   \end{errlist}}
 \end{functions}
 
   \end{errlist}}
 \end{functions}
 
@@ -1356,8 +1364,8 @@ prototipo è:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
-  \item[\errcode{ENOTDIR}] \param{pathname} è un pathname relativo, ma
-    \param{dirfd} fa riferimento ad un file. 
+  \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
+    \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file.
   \end{errlist}}
 \end{functions}
 
   \end{errlist}}
 \end{functions}
 
index 24e301d50252eafbae2df1ed2e9c9c08b050ca74..117bebd0ad9ba4b985ec90b7c4317c7749ff52ea 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -515,6 +515,8 @@ nomi che indicano le directory che lo compongono. Dato che la directory radice
 sta in cima all'albero, essa viene indicata semplicemente con il
 \textit{pathname} \file{/}.
 
 sta in cima all'albero, essa viene indicata semplicemente con il
 \textit{pathname} \file{/}.
 
+\itindbeg{pathname!resolution}
+
 Un file può essere indicato rispetto ad una directory semplicemente
 specificandone il nome, il manuale della \acr{glibc} chiama i nomi contenuti
 nelle directory \textsl{componenti} (in inglese \textit{file name
 Un file può essere indicato rispetto ad una directory semplicemente
 specificandone il nome, il manuale della \acr{glibc} chiama i nomi contenuti
 nelle directory \textsl{componenti} (in inglese \textit{file name
@@ -550,14 +552,15 @@ corrente e il secondo alla directory \textsl{genitrice} (o \textit{parent
   directory}) cioè la directory che contiene il riferimento alla directory
 corrente.
 
   directory}) cioè la directory che contiene il riferimento alla directory
 corrente.
 
-In questo modo con ``\file{..}'' si può usare un \textsl{pathname relativo}
-per indicare un file posto al di sopra della directory corrente, tornando
-all'indietro nell'albero dei file.  Questa retromarcia però su fermerà una
-volta raggiunta la directory radice, perché non esistendo in questo caso una
-directory superiore, il nome ``\file{..}'' farà riferimento alla radice
-stessa.
+In questo modo con ``\file{..}'' si può usare un \itindsub{pathname}{relativo}
+pathname relativo per indicare un file posto al di sopra della directory
+corrente, tornando all'indietro nell'albero dei file.  Questa retromarcia però
+su fermerà una volta raggiunta la directory radice, perché non esistendo in
+questo caso una directory superiore, il nome ``\file{..}''  farà riferimento
+alla radice stessa.
 
 \itindend{pathname}
 
 \itindend{pathname}
+\itindend{pathname!resolution}
 
 
 \subsection{I tipi di file}
 
 
 \subsection{I tipi di file}
@@ -1376,9 +1379,9 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco:
 
 \item[\macro{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili
   le estensioni delle funzioni di creazione, accesso e modifica di file e
 
 \item[\macro{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili
   le estensioni delle funzioni di creazione, accesso e modifica di file e
-  directory che risolvono i problemi di sicurezza insiti nell'uso di pathname
-  relativi con programmi \itindex{thread} \textit{multi-thread} illustrate in
-  sez.~\ref{sec:file_openat}.
+  directory che risolvono i problemi di sicurezza insiti nell'uso di
+  \textit{pathname} relativi con programmi \itindex{thread}
+  \textit{multi-thread} illustrate in sez.~\ref{sec:file_openat}.
 
 \item[\macro{\_REENTRANT}] definendo questa macro, o la equivalente
   \macro{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le
 
 \item[\macro{\_REENTRANT}] definendo questa macro, o la equivalente
   \macro{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le
diff --git a/ipc.tex b/ipc.tex
index 81ad3cf624dc3e73c0c3ddc8f23e3614bc778272..e22736f329cba925ff4f1fece327943831702bd0 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -649,12 +649,12 @@ state raccolte nella libreria \file{libgapil.so}, per poter usare quest'ultima
 occorrerà definire la variabile di ambiente \envvar{LD\_LIBRARY\_PATH} in modo
 che il linker dinamico possa accedervi.
 
 occorrerà definire la variabile di ambiente \envvar{LD\_LIBRARY\_PATH} in modo
 che il linker dinamico possa accedervi.
 
-In generale questa variabile indica il \itindex{pathname} \textit{pathname}
-della directory contenente la libreria. Nell'ipotesi (che daremo sempre per
-verificata) che si facciano le prove direttamente nella directory dei sorgenti
-(dove di norma vengono creati sia i programmi che la libreria), il comando da
-dare sarà \code{export LD\_LIBRARY\_PATH=./}; a questo punto potremo lanciare
-il server, facendogli leggere una decina di frasi, con:
+In generale questa variabile indica il \textit{pathname} della directory
+contenente la libreria. Nell'ipotesi (che daremo sempre per verificata) che si
+facciano le prove direttamente nella directory dei sorgenti (dove di norma
+vengono creati sia i programmi che la libreria), il comando da dare sarà
+\code{export LD\_LIBRARY\_PATH=./}; a questo punto potremo lanciare il server,
+facendogli leggere una decina di frasi, con:
 \begin{Verbatim}
 [piccardi@gont sources]$ ./fortuned -n10
 \end{Verbatim}
 \begin{Verbatim}
 [piccardi@gont sources]$ ./fortuned -n10
 \end{Verbatim}
@@ -882,13 +882,13 @@ nome di un file ed un numero di versione; il suo prototipo è:
 \end{functions}
 
 La funzione determina un valore della chiave sulla base di \param{pathname},
 \end{functions}
 
 La funzione determina un valore della chiave sulla base di \param{pathname},
-che deve specificare il \itindex{pathname} \textit{pathname} di un file
-effettivamente esistente e di un numero di progetto \param{proj\_id)}, che di
-norma viene specificato come carattere, dato che ne vengono utilizzati solo
-gli 8 bit meno significativi.\footnote{nelle libc4 e libc5, come avviene in
-  SunOS, l'argomento \param{proj\_id} è dichiarato tipo \ctyp{char}, la
-  \acr{glibc} usa il prototipo specificato da XPG4, ma vengono lo stesso
-  utilizzati gli 8 bit meno significativi.}
+che deve specificare il \textit{pathname} di un file effettivamente esistente
+e di un numero di progetto \param{proj\_id)}, che di norma viene specificato
+come carattere, dato che ne vengono utilizzati solo gli 8 bit meno
+significativi.\footnote{nelle libc4 e libc5, come avviene in SunOS,
+  l'argomento \param{proj\_id} è dichiarato tipo \ctyp{char}, la \acr{glibc}
+  usa il prototipo specificato da XPG4, ma vengono lo stesso utilizzati gli 8
+  bit meno significativi.}
 
 Il problema è che anche così non c'è la sicurezza che il valore della chiave
 sia univoco, infatti esso è costruito combinando il byte di \param{proj\_id)}
 
 Il problema è che anche così non c'è la sicurezza che il valore della chiave
 sia univoco, infatti esso è costruito combinando il byte di \param{proj\_id)}
@@ -3284,8 +3284,8 @@ possono avere o meno una corrispondenza sul filesystem; tutto quello che è
 richiesto è che:
 \begin{itemize*}
 \item i nomi devono essere conformi alle regole che caratterizzano i
 richiesto è che:
 \begin{itemize*}
 \item i nomi devono essere conformi alle regole che caratterizzano i
-  \itindex{pathname} \textit{pathname}, in particolare non essere più lunghi di
-  \const{PATH\_MAX} byte e terminati da un carattere nullo.
+  \textit{pathname}, in particolare non essere più lunghi di \const{PATH\_MAX}
+  byte e terminati da un carattere nullo.
 \item se il nome inizia per una \texttt{/} chiamate differenti allo stesso
   nome fanno riferimento allo stesso oggetto, altrimenti l'interpretazione del
   nome dipende dall'implementazione.
 \item se il nome inizia per una \texttt{/} chiamate differenti allo stesso
   nome fanno riferimento allo stesso oggetto, altrimenti l'interpretazione del
   nome dipende dall'implementazione.
@@ -4018,12 +4018,12 @@ esistente o per crearne uno nuovi, i relativi prototipi sono:
 
 L'argomento \param{name} definisce il nome del semaforo che si vuole
 utilizzare, ed è quello che permette a processi diversi di accedere allo
 
 L'argomento \param{name} definisce il nome del semaforo che si vuole
 utilizzare, ed è quello che permette a processi diversi di accedere allo
-stesso semaforo. Questo deve essere specificato con un pathname nella forma
-\texttt{/qualchenome}, che non ha una corrispondenza diretta con un pathname
-reale; con Linux infatti i file associati ai semafori sono mantenuti nel
-filesystem virtuale \texttt{/dev/shm}, e gli viene assegnato automaticamente
-un nome nella forma \texttt{sem.qualchenome}.\footnote{si ha cioè una
-  corrispondenza per cui \texttt{/qualchenome} viene rimappato, nella
+stesso semaforo. Questo deve essere specificato con un \textit{pathname} nella
+forma \texttt{/qualchenome}, che non ha una corrispondenza diretta con un
+\textit{pathname} reale; con Linux infatti i file associati ai semafori sono
+mantenuti nel filesystem virtuale \texttt{/dev/shm}, e gli viene assegnato
+automaticamente un nome nella forma \texttt{sem.qualchenome}.\footnote{si ha
+  cioè una corrispondenza per cui \texttt{/qualchenome} viene rimappato, nella
   creazione tramite \func{sem\_open}, su \texttt{/dev/shm/sem.qualchenome}.}
 
 L'argomento \param{oflag} è quello che controlla le modalità con cui opera la
   creazione tramite \func{sem\_open}, su \texttt{/dev/shm/sem.qualchenome}.}
 
 L'argomento \param{oflag} è quello che controlla le modalità con cui opera la
index a952fca60e983317e588cf8b8f3ed32ab6e6e823..3899480ccd5d6ce866ecd1ac52330ef7879e5d3f 100644 (file)
--- a/macro.tex
+++ b/macro.tex
 
 \newcommand{\ids}[1]{\textsl{#1}}     % Identifier (PID, GID, UID, TID, ecc.)
 \newcommand{\envvar}[1]{\texttt{#1}}   % environment variable
 
 \newcommand{\ids}[1]{\textsl{#1}}     % Identifier (PID, GID, UID, TID, ecc.)
 \newcommand{\envvar}[1]{\texttt{#1}}   % environment variable
+\newcommand{\samplefunc}[1]{\texttt{#1}}   % funzione degli esempi
 
 \newcommand{\itindex}[1]{%
 \index{#1@{\textit{#1}}}%
 
 \newcommand{\itindex}[1]{%
 \index{#1@{\textit{#1}}}%
index c7bbfb73ae78e7a376b0e67d9ce638d2ca8bc31d..9f52a4203f5d1c842564a54cc015da1d994848dc 100644 (file)
@@ -249,7 +249,7 @@ di quelli installati con il sistema,\footnote{in un sistema GNU/Linux che
   \textit{Filesystem Hierarchy Standard} (per maggiori informazioni si
   consulti sez.~1.2.3 di \cite{AGL}) si trovano sotto \texttt{/usr/include}.}
 o fra virgolette, nel qual caso si fa riferimento ad una versione locale, da
   \textit{Filesystem Hierarchy Standard} (per maggiori informazioni si
   consulti sez.~1.2.3 di \cite{AGL}) si trovano sotto \texttt{/usr/include}.}
 o fra virgolette, nel qual caso si fa riferimento ad una versione locale, da
-indicare con un pathname relativo:
+indicare con un \itindsub{pathname}{relativo} \textit{pathname} relativo:
 \includecodesnip{listati/main_include.c}
 
 Si tenga presente che oltre ai nomi riservati a livello generale di cui si è
 \includecodesnip{listati/main_include.c}
 
 Si tenga presente che oltre ai nomi riservati a livello generale di cui si è
@@ -2762,7 +2762,7 @@ permetterebbe di eseguire questi cambiamenti.
     \includecodesample{listati/endian.c}
   \end{minipage} 
   \normalsize
     \includecodesample{listati/endian.c}
   \end{minipage} 
   \normalsize
-  \caption{La funzione \func{endian}, usata per controllare il tipo di
+  \caption{La funzione \samplefunc{endian}, usata per controllare il tipo di
     architettura della macchina.}
   \label{fig:sock_endian_code}
 \end{figure}
     architettura della macchina.}
   \label{fig:sock_endian_code}
 \end{figure}
index abe6f477066509608cc93081249bdbf63879eaf3..cb4c1158992133a4a47229ec592f349e20f79fda 100644 (file)
@@ -238,12 +238,12 @@ Il fatto che il \ids{PID} sia un numero univoco per il sistema lo rende un
 candidato per generare ulteriori indicatori associati al processo di cui
 diventa possibile garantire l'unicità: ad esempio in alcune implementazioni la
 funzione \func{tempnam} (si veda sez.~\ref{sec:file_temp_file}) usa il
 candidato per generare ulteriori indicatori associati al processo di cui
 diventa possibile garantire l'unicità: ad esempio in alcune implementazioni la
 funzione \func{tempnam} (si veda sez.~\ref{sec:file_temp_file}) usa il
-\ids{PID} per generare un \itindex{pathname} \textit{pathname} univoco, che
-non potrà essere replicato da un altro processo che usi la stessa
-funzione. Questo utilizzo però può risultare pericoloso, un \ids{PID} infatti
-è univoco solo fintanto che un processo è attivo, una volta terminato esso
-potrà essere riutilizzato da un processo completamente diverso, e di questo
-bisogna essere ben consapevoli.
+\ids{PID} per generare un \textit{pathname} univoco, che non potrà essere
+replicato da un altro processo che usi la stessa funzione. Questo utilizzo
+però può risultare pericoloso, un \ids{PID} infatti è univoco solo fintanto
+che un processo è attivo, una volta terminato esso potrà essere riutilizzato
+da un processo completamente diverso, e di questo bisogna essere ben
+consapevoli.
 
 Tutti i processi figli dello stesso processo padre sono detti
 \textit{sibling}, questa è una delle relazioni usate nel \textsl{controllo di
 
 Tutti i processi figli dello stesso processo padre sono detti
 \textit{sibling}, questa è una delle relazioni usate nel \textsl{controllo di
@@ -1392,7 +1392,7 @@ prototipo è:
   \item[\errcode{EACCES}] il file o l'interprete non file ordinari, o non sono
     eseguibili, o il file è su un filesystem montato con l'opzione
     \cmd{noexec}, o manca  il permesso di attraversamento di una delle
   \item[\errcode{EACCES}] il file o l'interprete non file ordinari, o non sono
     eseguibili, o il file è su un filesystem montato con l'opzione
     \cmd{noexec}, o manca  il permesso di attraversamento di una delle
-    directory del pathname.
+    directory del \textit{pathname}.
   \item[\errcode{EINVAL}] l'eseguibile ELF ha più di un segmento
     \const{PF\_INTERP}, cioè chiede di essere eseguito da più di un
     interprete.
   \item[\errcode{EINVAL}] l'eseguibile ELF ha più di un segmento
     \const{PF\_INTERP}, cioè chiede di essere eseguito da più di un
     interprete.
@@ -1415,7 +1415,7 @@ prototipo è:
 \end{funcproto}
 
 La funzione \func{execve} esegue il programma o lo script indicato dal
 \end{funcproto}
 
 La funzione \func{execve} esegue il programma o lo script indicato dal
-pathname \param{filename}, passandogli la lista di argomenti indicata
+\textit{pathname} \param{filename}, passandogli la lista di argomenti indicata
 da \param{argv} e come ambiente la lista di stringhe indicata
 da \param{envp}. Entrambe le liste devono essere terminate da un puntatore
 nullo. I vettori degli argomenti e dell'ambiente possono essere acceduti dal
 da \param{argv} e come ambiente la lista di stringhe indicata
 da \param{envp}. Entrambe le liste devono essere terminate da un puntatore
 nullo. I vettori degli argomenti e dell'ambiente possono essere acceduti dal
@@ -1522,7 +1522,7 @@ proseguita nelle eventuali ulteriori directory indicate in \envvar{PATH}; solo
 se non viene trovato nessun altro file viene finalmente restituito
 \errcode{EACCES}.  Le altre quattro funzioni si limitano invece a cercare di
 eseguire il file indicato dall'argomento \param{path}, che viene interpretato
 se non viene trovato nessun altro file viene finalmente restituito
 \errcode{EACCES}.  Le altre quattro funzioni si limitano invece a cercare di
 eseguire il file indicato dall'argomento \param{path}, che viene interpretato
-come il \itindex{pathname} \textit{pathname} del programma.
+come il \textit{pathname} del programma.
 
 La terza differenza è come viene passata la lista delle variabili di ambiente.
 Con lo mnemonico ``\texttt{e}'' vengono indicate quelle funzioni che
 
 La terza differenza è come viene passata la lista delle variabili di ambiente.
 Con lo mnemonico ``\texttt{e}'' vengono indicate quelle funzioni che
@@ -2211,7 +2211,7 @@ chiamata con un vettore di dimensioni adeguate.
 
 Infine per impostare i gruppi supplementari di un processo ci sono due
 funzioni, che possono essere usate solo se si hanno i privilegi di
 
 Infine per impostare i gruppi supplementari di un processo ci sono due
 funzioni, che possono essere usate solo se si hanno i privilegi di
-amministratore.\footnote{e più precisamente se si ha la \itindex{capability}
+amministratore.\footnote{e più precisamente se si ha la \itindex{capabilities}
   \textit{capability} \macro{CAP\_SETGID}.} La prima delle due è
 \funcd{setgroups},\footnote{la funzione è definita in BSD e SRv4, ma a
   differenza di \func{getgroups} non è stata inclusa in POSIX.1-2001, per
   \textit{capability} \macro{CAP\_SETGID}.} La prima delle due è
 \funcd{setgroups},\footnote{la funzione è definita in BSD e SRv4, ma a
   differenza di \func{getgroups} non è stata inclusa in POSIX.1-2001, per
index ced82eb6ab11a0825d4ed10411cedfb3be5dd7ea..cf880e57e3b72a53d84f87b0198ee15950053390 100644 (file)
@@ -1380,10 +1380,10 @@ deve essere di almeno \const{L\_ctermid}\footnote{\const{L\_ctermid} è una
   sez.~\ref{sec:sys_characteristics} che indica la dimensione che deve avere
   una stringa per poter contenere il nome di un terminale.} caratteri.
 
   sez.~\ref{sec:sys_characteristics} che indica la dimensione che deve avere
   una stringa per poter contenere il nome di un terminale.} caratteri.
 
-Si tenga presente che il \itindex{pathname} \textit{pathname} restituito dalla
-funzione potrebbe non identificare univocamente il terminale (ad esempio
-potrebbe essere \file{/dev/tty}), inoltre non è detto che il processo possa
-effettivamente essere in grado di aprire il terminale.
+Si tenga presente che il \textit{pathname} restituito dalla funzione potrebbe
+non identificare univocamente il terminale (ad esempio potrebbe essere
+\file{/dev/tty}), inoltre non è detto che il processo possa effettivamente
+essere in grado di aprire il terminale.
 
 I vari attributi associati ad un terminale vengono mantenuti per ciascuno di
 essi in una struttura \struct{termios} che viene usata dalle varie funzioni
 
 I vari attributi associati ad un terminale vengono mantenuti per ciascuno di
 essi in una struttura \struct{termios} che viene usata dalle varie funzioni
index 456c4a218007e4d3cdffa6ee8767cd1ba3b5a130..75bcbac34c317b9ca7961c492f460cc9fab58b02 100644 (file)
@@ -2881,8 +2881,8 @@ l'orologio associato ad un \textit{thread} invece che a un processo, è
 }
 \end{functions}
 
 }
 \end{functions}
 
-
 % TODO, dal 2.6.39 aggiunta clock_adjtime 
 % TODO, dal 2.6.39 aggiunta clock_adjtime 
+% TODO manca clock_nanosleep
 
 Con l'introduzione degli orologi ad alta risoluzione è divenuto possibile
 ottenere anche una gestione più avanzata degli allarmi; abbiamo già visto in
 
 Con l'introduzione degli orologi ad alta risoluzione è divenuto possibile
 ottenere anche una gestione più avanzata degli allarmi; abbiamo già visto in
index 58a18a5c6f0155be05bff70faf23f035ec09159a..9f1feb6f64bfc8c293e4c727bdbd48c7b81f6ee3 100644 (file)
@@ -561,9 +561,9 @@ il campo \var{sun\_path} deve specificare un indirizzo. Questo ha due forme;
 può essere un file (di tipo socket) nel filesystem o una stringa univoca
 (mantenuta in uno spazio di nomi astratto). Nel primo caso l'indirizzo viene
 specificato come una stringa (terminata da uno zero) corrispondente al
 può essere un file (di tipo socket) nel filesystem o una stringa univoca
 (mantenuta in uno spazio di nomi astratto). Nel primo caso l'indirizzo viene
 specificato come una stringa (terminata da uno zero) corrispondente al
-\itindex{pathname} \textit{pathname} del file; nel secondo invece
-\var{sun\_path} inizia con uno zero e vengono usati come nome i restanti byte
-come stringa, senza terminazione.
+\textit{pathname} del file; nel secondo invece \var{sun\_path} inizia con uno
+zero e vengono usati come nome i restanti byte come stringa, senza
+terminazione.
 
 
 \subsection{La struttura degli indirizzi AppleTalk}
 
 
 \subsection{La struttura degli indirizzi AppleTalk}
index 77a866afcea69c5179a3d7a709eee9190d389f8f..7589160ef4b4532a3d1a4af39433998bccb999f2 100644 (file)
@@ -403,8 +403,7 @@ riportate in tab.~\ref{tab:sys_file_macro}.
     \hline                
     \const{LINK\_MAX}   &8  & Numero massimo di link a un file.\\
     \const{NAME\_MAX}&  14  & Lunghezza in byte di un nome di file. \\
     \hline                
     \const{LINK\_MAX}   &8  & Numero massimo di link a un file.\\
     \const{NAME\_MAX}&  14  & Lunghezza in byte di un nome di file. \\
-    \const{PATH\_MAX}& 256  & Lunghezza in byte di un
-                              \itindex{pathname} \textit{pathname}.\\
+    \const{PATH\_MAX}& 256  & Lunghezza in byte di un \textit{pathname}.\\
     \const{PIPE\_BUF}&4096  & Byte scrivibili atomicamente in una pipe
                               (vedi sez.~\ref{sec:ipc_pipes}).\\
     \const{MAX\_CANON}&255  & Dimensione di una riga di terminale in modo 
     \const{PIPE\_BUF}&4096  & Byte scrivibili atomicamente in una pipe
                               (vedi sez.~\ref{sec:ipc_pipes}).\\
     \const{MAX\_CANON}&255  & Dimensione di una riga di terminale in modo 
@@ -435,7 +434,7 @@ le analoghe di tab.~\ref{tab:sys_posix1_general}.
     \const{\_POSIX\_LINK\_MAX}   &8  & Numero massimo di link a un file.\\
     \const{\_POSIX\_NAME\_MAX}&  14  & Lunghezza in byte di un nome di file.\\
     \const{\_POSIX\_PATH\_MAX}& 256  & Lunghezza in byte di un 
     \const{\_POSIX\_LINK\_MAX}   &8  & Numero massimo di link a un file.\\
     \const{\_POSIX\_NAME\_MAX}&  14  & Lunghezza in byte di un nome di file.\\
     \const{\_POSIX\_PATH\_MAX}& 256  & Lunghezza in byte di un 
-                                       \itindex{pathname} \textit{pathname}.\\
+                                       \textit{pathname}.\\
     \const{\_POSIX\_PIPE\_BUF}& 512  & Byte scrivibili atomicamente in una
                                        pipe.\\
     \const{\_POSIX\_MAX\_CANON}&255  & Dimensione di una riga di
     \const{\_POSIX\_PIPE\_BUF}& 512  & Byte scrivibili atomicamente in una
                                        pipe.\\
     \const{\_POSIX\_MAX\_CANON}&255  & Dimensione di una riga di
@@ -478,13 +477,13 @@ E si noti come la funzione in questo caso richieda un argomento che specifichi
 a quale file si fa riferimento, dato che il valore del limite cercato può
 variare a seconda del filesystem. Una seconda versione della funzione,
 \funcd{fpathconf}, opera su un file descriptor invece che su un
 a quale file si fa riferimento, dato che il valore del limite cercato può
 variare a seconda del filesystem. Una seconda versione della funzione,
 \funcd{fpathconf}, opera su un file descriptor invece che su un
-\itindex{pathname} \textit{pathname}. Il suo prototipo è:
+\textit{pathname}. Il suo prototipo è:
 \begin{prototype}{unistd.h}{long fpathconf(int fd, int name)}
   Restituisce il valore del parametro \param{name} per il file \param{fd}.
   
   \bodydesc{È identica a \func{pathconf} solo che utilizza un file descriptor
 \begin{prototype}{unistd.h}{long fpathconf(int fd, int name)}
   Restituisce il valore del parametro \param{name} per il file \param{fd}.
   
   \bodydesc{È identica a \func{pathconf} solo che utilizza un file descriptor
-    invece di un \itindex{pathname} \textit{pathname}; pertanto gli errori
-    restituiti cambiano di conseguenza.}
+    invece di un \textit{pathname}; pertanto gli errori restituiti cambiano di
+    conseguenza.}
 \end{prototype}
 \noindent ed il suo comportamento è identico a quello di \func{pathconf}.
 
 \end{prototype}
 \noindent ed il suo comportamento è identico a quello di \func{pathconf}.
 
@@ -603,8 +602,8 @@ maniera gerarchica all'interno di un albero;\footnote{si tenga presente che
   di Linux occorrerà includere anche i file \file{linux/unistd.h} e
   \file{linux/sysctl.h}.} per accedere ad uno di essi occorre specificare un
 cammino attraverso i vari nodi dell'albero, in maniera analoga a come avviene
   di Linux occorrerà includere anche i file \file{linux/unistd.h} e
   \file{linux/sysctl.h}.} per accedere ad uno di essi occorre specificare un
 cammino attraverso i vari nodi dell'albero, in maniera analoga a come avviene
-per la risoluzione di un \itindex{pathname} \textit{pathname} (da cui l'uso
-alternativo del filesystem \file{/proc}, che vedremo dopo).
+per la risoluzione di un \textit{pathname} (da cui l'uso alternativo del
+filesystem \file{/proc}, che vedremo dopo).
 
 Ciascun nodo dell'albero è identificato da un valore intero, ed il cammino che
 arriva ad identificare un parametro specifico è passato alla funzione
 
 Ciascun nodo dell'albero è identificato da un valore intero, ed il cammino che
 arriva ad identificare un parametro specifico è passato alla funzione
@@ -647,9 +646,9 @@ forma di file alcune delle strutture interne del kernel stesso.
 
 In particolare l'albero dei valori di \func{sysctl} viene presentato in forma
 di file nella directory \file{/proc/sys}, cosicché è possibile accedervi
 
 In particolare l'albero dei valori di \func{sysctl} viene presentato in forma
 di file nella directory \file{/proc/sys}, cosicché è possibile accedervi
-specificando un \itindex{pathname} \textit{pathname} e leggendo e scrivendo sul
-file corrispondente al parametro scelto.  Il kernel si occupa di generare al
-volo il contenuto ed i nomi dei file corrispondenti, e questo ha il grande
+specificando un \textit{pathname} e leggendo e scrivendo sul file
+corrispondente al parametro scelto.  Il kernel si occupa di generare al volo
+il contenuto ed i nomi dei file corrispondenti, e questo ha il grande
 vantaggio di rendere accessibili i vari parametri a qualunque comando di shell
 e di permettere la navigazione dell'albero dei valori.
 
 vantaggio di rendere accessibili i vari parametri a qualunque comando di shell
 e di permettere la navigazione dell'albero dei valori.
 
@@ -898,6 +897,8 @@ file di \textsl{registro} di utenti e gruppi, con il formato classico di
   \label{tab:sys_passwd_func}
 \end{table}
 
   \label{tab:sys_passwd_func}
 \end{table}
 
+% TODO mancano i prototipi di alcune delle funzioni
+
 Dato che oramai la gran parte delle distribuzioni di GNU/Linux utilizzano
 almeno le \textit{shadow password} (quindi con delle modifiche rispetto al
 formato classico del file \conffile{/etc/passwd}), si tenga presente che le
 Dato che oramai la gran parte delle distribuzioni di GNU/Linux utilizzano
 almeno le \textit{shadow password} (quindi con delle modifiche rispetto al
 formato classico del file \conffile{/etc/passwd}), si tenga presente che le
@@ -1548,10 +1549,10 @@ prototipo è:
     \errval{ENOTDIR}, \errval{EROFS}.}
 \end{prototype}
 
     \errval{ENOTDIR}, \errval{EROFS}.}
 \end{prototype}
 
-La funzione attiva il salvataggio dei dati sul file indicato dal pathname
-contenuti nella stringa puntata da \param{filename}; la funzione richiede che
-il processo abbia i privilegi di amministratore (è necessaria la
-\itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi
+La funzione attiva il salvataggio dei dati sul file indicato dal
+\textit{pathname} contenuti nella stringa puntata da \param{filename}; la
+funzione richiede che il processo abbia i privilegi di amministratore (è
+necessaria la \itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi
 sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \val{NULL} per
 \param{filename} il \textit{BSD accounting} viene invece disabilitato. Un
 semplice esempio per l'uso di questa funzione è riportato nel programma
 sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \val{NULL} per
 \param{filename} il \textit{BSD accounting} viene invece disabilitato. Un
 semplice esempio per l'uso di questa funzione è riportato nel programma
index 3786c86bdc7c68b6cbc58a2ddf906093c7a3f212..9961dd7a7c32d2e263c00120b1bace1d40102824 100644 (file)
@@ -3576,7 +3576,7 @@ sez.~\ref{sec:TCP_serv_select}.
 
 
 
 
 
 
-\subsection{I/O multiplexing con \func{epoll}}
+\subsection{I/O multiplexing con \textit{epoll}}
 \label{sec:TCP_serv_epoll}
 
 Da fare.
 \label{sec:TCP_serv_epoll}
 
 Da fare.