Riforma delle macro per le funzioni, si riformatta un bel po' di roba.
authorSimone Piccardi <piccardi@gnulinux.it>
Wed, 12 Dec 2001 23:02:25 +0000 (23:02 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Wed, 12 Dec 2001 23:02:25 +0000 (23:02 +0000)
filedir.tex
filestd.tex
fileunix.tex
macro.tex
process.tex
prochand.tex
system.tex

index 7574ac9a49a12a1a2376e7cbc72f59fbe99d4c12..46c502b85c2639941370b45a31235f19832579d1 100644 (file)
@@ -57,23 +57,23 @@ principali, come risultano dalla man page, sono le seguenti:
   Crea un nuovo collegamento diretto al file indicato da \var{oldpath}
   dandogli nome \var{newpath}.
   
-  La funzione restituisce zero in caso di successo e -1 in caso di errore. La
-  variabile \var{errno} viene settata opportunamente, i principali codici di
-  errore sono:
+  \bodydesc{La funzione restituisce zero in caso di successo e -1 in
+    caso di errore. La variabile \var{errno} viene settata
+    opportunamente, i principali codici di errore sono:
   \begin{errlist}
-  \item \macro{EXDEV} \var{oldpath} e \var{newpath} non sono sullo
+  \item[\macro{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo
     stesso filesystem.
-  \item \macro{EPERM} il filesystem che contiene \var{oldpath} e
+  \item[\macro{EPERM}] il filesystem che contiene \var{oldpath} e
     \macro{newpath} non supporta i link diretti o è una directory.
-  \item \macro{EEXIST} un file (o una directory) con quel nome esiste di
+  \item[\macro{EEXIST}] un file (o una directory) con quel nome esiste di
     già.
-  \item \macro{EMLINK} ci sono troppi link al file \var{oldpath} (il
+  \item[\macro{EMLINK}] ci sono troppi link al file \var{oldpath} (il
     numero massimo è specificato dalla variabile \macro{LINK\_MAX}, vedi
     \secref{sec:sys_limits}).
   \end{errlist}
   ed inoltre \macro{EACCES}, \macro{ENAMETOOLONG}, \macro{ENOTDIR},
   \macro{EFAULT}, \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP},
-  \macro{ENOSPC}, \macro{EIO}.
+  \macro{ENOSPC}, \macro{EIO}.}
 \end{prototype}
 
 La creazione di un nuovo collegamento diretto non copia il contenuto del file,
@@ -115,21 +115,21 @@ suo prototipo 
   dispositivo rimuove il nome, ma come per i file i processi che hanno aperto
   uno di questi oggetti possono continuare ad utilizzarlo.
   
-  La funzione restituisce zero in caso di successo e -1 per un errore, nel
-  qual caso il file non viene toccato. La variabile \var{errno} viene
-  settata secondo i seguenti codici di errore:
+  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+    errore, nel qual caso il file non viene toccato. La variabile
+    \var{errno} viene settata secondo i seguenti codici di errore:
   \begin{errlist}
-  \item \macro{EISDIR} \var{pathname} si riferisce ad una directory
+  \item[\macro{EISDIR}] \var{pathname} si riferisce ad una directory
     (valore specifico ritornato da Linux che non consente l'uso di
     \var{unlink} con le directory, e non conforme allo standard POSIX, che
     prescrive invece l'uso di \macro{EPERM} in caso l'operazione non sia
     consentita o il processo non abbia privilegi sufficienti).
-  \item \macro{EROFS} \var{pathname} è su un filesystem montato in sola
+  \item[\macro{EROFS}] \var{pathname} è su un filesystem montato in sola
   lettura.
-  \item \macro{EISDIR} \var{pathname} fa riferimento a una directory.
+  \item[\macro{EISDIR}] \var{pathname} fa riferimento a una directory.
   \end{errlist}
   ed inoltre: \macro{EACCES}, \macro{EFAULT}, \macro{ENOENT}, \macro{ENOTDIR},
-  \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP}, \macro{EIO}.
+  \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP}, \macro{EIO}.}
 \end{prototype}
 
 Per cancellare una voce in una directory è necessario avere il permesso di
@@ -176,9 +176,10 @@ directory 
   Cancella un nome dal filesystem. Usa \func{unlink} per i file e
   \func{rmdir} per le directory.
   
-  La funzione restituisce zero in caso di successo e -1 per un errore, nel
-  qual caso il file non viene toccato. Per i codici di errore vedi quanto
-  riportato nelle descrizioni di \func{unlink} e \func{rmdir}.
+  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+    errore, nel qual caso il file non viene toccato. Per i codici di
+    errore vedi quanto riportato nelle descrizioni di \func{unlink} e
+    \func{rmdir}.}
 \end{prototype}
 
 Per cambiare nome ad un file o a una directory (che devono comunque essere
@@ -192,28 +193,28 @@ nello stesso filesystem) si usa invece la funzione \func{rename}\footnote{la
   spostamento di un file fra directory diverse. Eventuali altri link diretti
   allo stesso file non vengono influenzati.
   
-  La funzione restituisce zero in caso di successo e -1 per un errore, nel
-  qual caso il file non viene toccato. La variabile \var{errno} viene settata
-  secondo i seguenti codici di errore:
+  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+    errore, nel qual caso il file non viene toccato. La variabile
+    \var{errno} viene settata secondo i seguenti codici di errore:
   \begin{errlist} 
-  \item \macro{EISDIR} \var{newpath} è una directory mentre \var{oldpath} non
+  \item[\macro{EISDIR}] \var{newpath} è una directory mentre \var{oldpath} non
     è una directory.
-  \item \macro{EXDEV} \var{oldpath} e \var{newpath} non sono sullo stesso
+  \item[\macro{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo stesso
     filesystem.
-  \item \macro{ENOTEMPTY} \var{newpath} è una directory già esistente e non
+  \item[\macro{ENOTEMPTY}] \var{newpath} è una directory già esistente e non
     vuota.
-  \item \macro{EBUSY} o \var{oldpath} o \var{newpath} sono in uso da parte di
+  \item[\macro{EBUSY}] o \var{oldpath} o \var{newpath} sono in uso da parte di
     qualche processo (come directory di lavoro o come radice) o del sistema
     (come mount point).
-  \item \macro{EINVAL} \var{newpath} contiene un prefisso di \var{oldpath} o
+  \item[\macro{EINVAL}] \var{newpath} contiene un prefisso di \var{oldpath} o
     più in generale si è cercato di creare una directory come sottodirectory
     di se stessa.
-  \item \macro{ENOTDIR} Uno dei componenti dei pathname non è una directory o
+  \item[\macro{ENOTDIR}] Uno dei componenti dei pathname non è una directory o
     \var{oldpath} è una directory e \var{newpath} esiste e non è una
     directory.
   \end{errlist} 
   ed inoltre \macro{EACCESS}, \macro{EPERM}, \macro{EMLINK}, \macro{ENOENT},
-  \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP} e \macro{ENOSPC}.
+  \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP} e \macro{ENOSPC}.}
 \end{prototype}
 
 Il comportamento della funzione è diverso a seconda che si voglia rinominare
@@ -278,19 +279,20 @@ specificato. La funzione che permette di creare un nuovo link simbolico 
   Crea un nuovo link simbolico di nome \func{newpath} il cui contenuto è
   \func{oldpath}.
   
-  La funzione restituisce zero in caso di successo e -1 per un errore, nel
-  qual caso la variabile \var{errno} restituisce i valori:
+  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+    errore, nel qual caso la variabile \var{errno} restituisce i valori:
   \begin{errlist}
-  \item \macro{EPERM} il filesystem che contiene \var{newpath} non supporta i
+  \item[\macro{EPERM}] il filesystem che contiene \var{newpath} non supporta i
     link simbolici.
-  \item \macro{ENOENT} una componente di \var{newpath} non esiste o
+  \item[\macro{ENOENT}] una componente di \var{newpath} non esiste o
     \func{oldpath} è una stringa vuota.
-  \item \macro{EEXIST} esiste già un file \var{newpath}.
-  \item \macro{EROFS} \var{newpath} è su un filesystem montato in sola lettura.
+  \item[\macro{EEXIST}] esiste già un file \var{newpath}.
+  \item[\macro{EROFS}] \var{newpath} è su un filesystem montato in sola
+    lettura.
   \end{errlist}
   ed inoltre \macro{EFAULT}, \macro{EACCES}, \macro{ENAMETOOLONG},
   \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, \macro{ENOSPC} e
-  \macro{EIO}.
+  \macro{EIO}.}
 \end{prototype}
 
 Si tenga presente che la funzione non effettua nessun controllo sull'esistenza
@@ -356,18 +358,20 @@ la funzione \func{readlink}, il cui prototipo 
   Legge il contenuto del link simbolico indicato da \var{path} nel buffer
   \var{buff} di dimensione \var{size}.
   
-  La funzione restituisce il numero di caratteri letti dentro \var{buff} o -1
-  per un errore, nel qual caso la variabile \var{errno} viene settata a:
+  \bodydesc{La funzione restituisce il numero di caratteri letti dentro
+    \var{buff} o -1 per un errore, nel qual caso la variabile
+    \var{errno} viene settata a:
   \begin{errlist}
-  \item \macro{EINVAL} \var{file} non è un link simbolico o \var{size} non è
+  \item[\macro{EINVAL}] \var{file} non è un link simbolico o \var{size} non è
     positiva. 
-  \item \macro{EROFS} La directory su cui si vuole inserire il nuovo link è
+  \item[\macro{EROFS}] La directory su cui si vuole inserire il nuovo link è
     su un filesystem montato in sola lettura.
-  \item \macro{ENOSPC} La directory o il filesystem in cui si vuole creare il
+  \item[\macro{ENOSPC}] La directory o il filesystem in cui si vuole creare il
     link è piena e non c'è ulteriore spazio disponibile.
   \end{errlist}
   ed inoltre \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{EACCES}, \macro{ELOOP}, \macro{EIO}, \macro{EFAULT} e \macro{ENOMEM}.
+  \macro{EACCES}, \macro{ELOOP}, \macro{EIO}, \macro{EFAULT} e
+  \macro{ENOMEM}.}
 \end{prototype}
 
 La funzione apre il link simbolico, ne legge il contenuto, lo scrive nel
@@ -437,24 +441,24 @@ prototipo della prima 
   assegnandole i permessi indicati da \var{mode}. Il nome può essere indicato
   con il pathname assoluto o relativo.
   
-  La funzione restituisce zero in caso di successo e -1 per un errore, nel
-  qual caso \var{errno} assumerà i valori:
+  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+    errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item \macro{EEXIST} Un file (o una directory) con quel nome esiste di già. 
-  \item \macro{EACCESS} 
+  \item[\macro{EEXIST}] Un file (o una directory) con quel nome esiste di già. 
+  \item[\macro{EACCESS}] 
     Non c'è il permesso di scrittura per la directory in cui si vuole inserire
     la nuova directory.
-  \item \macro{EMLINK} La directory in cui si vuole creare la nuova directory
+  \item[\macro{EMLINK}] La directory in cui si vuole creare la nuova directory
     contiene troppi file. Sotto Linux questo normalmente non avviene perché il
     filesystem standard consente la creazione di un numero di file maggiore di
     quelli che possono essere contenuti nel disco, ma potendo avere a che
     fare anche con filesystem di altri sistemi questo errore può presentarsi.
-  \item \macro{ENOSPC} Non c'è abbastanza spazio sul file system per creare
+  \item[\macro{ENOSPC}] Non c'è abbastanza spazio sul file system per creare
     la nuova directory o si è esaurita la quota disco dell'utente.
   \end{errlist}
   ed inoltre anche \macro{EPERM}, \macro{EFAULT}, \macro{ENAMETOOLONG},
   \macro{ENOENT}, \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP},
-  \macro{EROFS}.
+  \macro{EROFS}.}
 \end{prototype}
  
 La funzione crea una nuova directory vuota (che contiene solo le due voci
@@ -473,23 +477,23 @@ suo prototipo 
   deve essere vuota.  Il nome può essere indicato con il pathname assoluto o
   relativo.
   
-  La funzione restituisce zero in caso di successo e -1 per un errore, nel
-  qual caso \var{errno} assumerà i valori:
+  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+    errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item \macro{EPERM} Il filesystem non supporta la cancellazione di
+  \item[\macro{EPERM}] Il filesystem non supporta la cancellazione di
     directory, oppure la directory che contiene \var{dirname} ha lo sticky bit
     settato e l'\textit{effective user id} del processo non corrisponde al
     proprietario della directory. 
-  \item \macro{EACCESS} Non c'è il permesso di scrittura per la directory che
+  \item[\macro{EACCESS}] Non c'è il permesso di scrittura per la directory che
     contiene la directory che si vuole cancellare, o non c'è il permesso di
     attraversare (esecuzione) una delle directory specificate in
     \var{dirname}.
-  \item \macro{EBUSY} La directory specificata è la directory di lavoro o la
+  \item[\macro{EBUSY}] La directory specificata è la directory di lavoro o la
     radice di qualche processo.
-  \item \macro{ENOTEMPTY} La directory non è vuota.
+  \item[\macro{ENOTEMPTY}] La directory non è vuota.
   \end{errlist}
   ed inoltre anche \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, \macro{EROFS}.
+  \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, \macro{EROFS}.}
 \end{prototype}
 
 La modalità con cui avviene la cancellazione è analoga a quella di
@@ -546,18 +550,18 @@ apposita funzione di libreria,  \func{getcwd}, il cui prototipo 
   stringa puntata da \var{buffer}, che deve essere precedentemente
   allocata, per una dimensione massima di \var{size}.
   
-  La funzione restituisce il puntatore \var{buffer} se riesce, \macro{NULL} se
-  fallisce, in quest'ultimo caso la variabile \var{errno} è settata con i
-  seguenti codici di errore:
+  \bodydesc{La funzione restituisce il puntatore \var{buffer} se riesce,
+    \macro{NULL} se fallisce, in quest'ultimo caso la variabile
+    \var{errno} è settata con i seguenti codici di errore:
   \begin{errlist}
-  \item \macro{EINVAL} L'argomento \var{size} è zero e \var{buffer} non
+  \item[\macro{EINVAL}] L'argomento \var{size} è zero e \var{buffer} non
     è nullo.
-  \item \macro{ERANGE} L'argomento \var{size} è più piccolo della
+  \item[\macro{ERANGE}] L'argomento \var{size} è più piccolo della
     lunghezza del pathname. 
-  \item \macro{EACCESS} Manca il permesso di lettura o di ricerca su uno dei
+  \item[\macro{EACCESS}] Manca il permesso di lettura o di ricerca su uno dei
     componenti del pathname (cioè su una delle directory superiori alla
     corrente).
-  \end{errlist}
+  \end{errlist}}
 \end{prototype}
 
 Il buffer deve essere sufficientemente lungo da poter contenere il pathname
@@ -601,17 +605,17 @@ non solo tramite il filename, i prototipi di queste funzioni sono:
   \funcdecl{int fchdir (int fd)} Analoga alla precedente, ma
   usa un file descriptor invece del pathname.
   
-  Entrambe le funzioni restituiscono zero in caso di successo e -1 per un
-  errore, in caso di errore \var{errno} viene settata per \func{chdir} ai
-  valori:
+  \bodydesc{Entrambe le funzioni restituiscono zero in caso di successo
+    e -1 per un errore, in caso di errore \var{errno} viene settata per
+    \func{chdir} ai valori:
   \begin{errlist}
-  \item \macro{ENOTDIR} Uno dei componenti di \var{path} non è una directory. 
-  \item \macro{EACCESS} Manca il permesso di ricerca su uno dei componenti di
+  \item[\macro{ENOTDIR}] Uno dei componenti di \var{path} non è una directory. 
+  \item[\macro{EACCESS}] Manca il permesso di ricerca su uno dei componenti di
     \func{path}.
   \end{errlist}
   ed inoltre \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT},
   \macro{ENOMEM}, \macro{ELOOP} e \macro{EIO}. Per \func{fchdir} invece gli
-  errori sono \macro{EBADF} e \macro{EACCES}.
+  errori sono \macro{EBADF} e \macro{EACCES}.}
 \end{functions}
 
 
@@ -654,10 +658,11 @@ queste funzioni sono i seguenti:
   eccetto che si usa con un file aperto, specificato tramite il suo file
   descriptor \var{filedes}.
   
-  Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
-  caso di errore \var{errno} può assumere uno dei valori: \macro{EBADF},
-  \macro{ENOENT}, \macro{ENOTDIR}, \macro{ELOOP}, \macro{EFAULT},
-  \macro{EACCESS}, \macro{ENOMEM}, \macro{ENAMETOOLONG}.
+  \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
+    un errore, in caso di errore \var{errno} può assumere uno dei
+    valori: \macro{EBADF}, \macro{ENOENT}, \macro{ENOTDIR},
+    \macro{ELOOP}, \macro{EFAULT}, \macro{EACCESS}, \macro{ENOMEM},
+    \macro{ENAMETOOLONG}.}
 \end{functions}
 
 La struttura \var{stat} è definita nell'header \file{sys/stat.h} e in
@@ -835,22 +840,22 @@ dimensione si possono usare le due funzioni:
   eccetto che si usa con un file aperto, specificato tramite il suo file
   descriptor \var{fd}.
   
-  Le funzioni restituiscono zero in caso di successo e -1 per un errore, nel
-  qual caso \var{errno} viene settato opportunamente; per \func{ftruncate} si
-  hanno i valori:
+  \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
+    un errore, nel qual caso \var{errno} viene settato opportunamente;
+    per \func{ftruncate} si hanno i valori:
   \begin{errlist}
-  \item \macro{EBADF} \var{fd}  non è un file descriptor.
-  \item \macro{EINVAL} \var{fd} è un riferimento ad un socket, non a un file
+  \item[\macro{EBADF}] \var{fd}  non è un file descriptor.
+  \item[\macro{EINVAL}] \var{fd} è un riferimento ad un socket, non a un file
     o non è aperto in scrittura.
   \end{errlist}
   per \func{truncate} si hanno:
   \begin{errlist}
-  \item \macro{EACCES} il file non ha permesso di scrittura o non si ha il
+  \item[\macro{EACCES}] il file non ha permesso di scrittura o non si ha il
     permesso di esecuzione una delle directory del pathname. 
-  \item \macro{ETXTBSY} Il file è un programma in esecuzione.
+  \item[\macro{ETXTBSY}] Il file è un programma in esecuzione.
   \end{errlist}
   ed anche \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{EROFS}, \macro{EIO}, \macro{EFAULT}, \macro{ELOOP}.
+  \macro{EROFS}, \macro{EIO}, \macro{EFAULT}, \macro{ELOOP}.}
 \end{functions}
 
 Se il file è più lungo della lunghezza specificata i dati in eccesso saranno
@@ -1017,12 +1022,12 @@ Cambia i tempi di ultimo accesso e modifica dell'inode specificato da
 \var{filename} secondo i campi \var{actime} e \var{modtime} di \var{times}. Se
 questa è \macro{NULL} allora viene usato il tempo corrente.
 
-La funzione restituisce zero in caso di successo e -1 in caso di errore, nel
-qual caso \var{errno} è settata opportunamente.
+\bodydesc{La funzione restituisce zero in caso di successo e -1 in caso
+  di errore, nel qual caso \var{errno} è settata opportunamente.
 \begin{errlist}
-\item \macro{EACCESS} non si ha il permesso di scrittura sul file.
-\item \macro{ENOENT} \var{filename} non esiste.
-\end{errlist}
+\item[\macro{EACCESS}] non si ha il permesso di scrittura sul file.
+\item[\macro{ENOENT}] \var{filename} non esiste.
+\end{errlist}}
 \end{prototype}
  
 La struttura \var{utimebuf} usata da \func{utime} è definita come:
@@ -1455,16 +1460,16 @@ i loro prototipi sono:
   \funcdecl{int fchmod(int fd, mode\_t mode)} Analoga alla precedente, ma usa
   il file descriptor \var{fd} per indicare il file.
   
-  Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
-  caso di errore \var{errno} può assumere i valori:
+  \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
+    un errore, in caso di errore \var{errno} può assumere i valori:
   \begin{errlist}
-  \item \macro{EPERM} L'\textit{effective user id} non corrisponde a quello
+  \item[\macro{EPERM}] L'\textit{effective user id} non corrisponde a quello
     del proprietario del file o non è zero.
   \end{errlist}
   ed inoltre \macro{EROFS} e \macro{EIO}; \func{chmod} restituisce anche
   \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM},
   \macro{ENOTDIR}, \macro{EACCES}, \macro{ELOOP}; \func{fchmod} anche
-  \macro{EBADF}.
+  \macro{EBADF}.}
 \end{functions}
 
 I valori possibili per \var{mode} sono indicati in \ntab. I valori possono
@@ -1589,17 +1594,17 @@ sono tre e i loro prototipi sono i seguenti:
 
   Le funzioni cambiano utente e gruppo di appartenenza di un file ai valori
   specificati dalle variabili \var{owner} e \var{group}. 
-
-  Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
-  caso di errore \texttt{errno} viene settato ai valori:
+  
+  \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
+    un errore, in caso di errore \texttt{errno} viene settato ai valori:
   \begin{errlist}
-  \item \macro{EPERM} L'\textit{effective user id} non corrisponde a quello
+  \item[\macro{EPERM}] L'\textit{effective user id} non corrisponde a quello
     del proprietario del file o non è zero, o utente e gruppo non sono validi
   \end{errlist}
   Oltre a questi entrambe restituiscono gli errori \macro{EROFS} e
   \macro{EIO}; \func{chown} restituisce anche \macro{EFAULT},
   \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR},
-  \macro{EACCES}, \macro{ELOOP}; \func{fchown} anche \macro{EBADF}.
+  \macro{EACCES}, \macro{ELOOP}; \func{fchown} anche \macro{EBADF}.}
 \end{functions}
 
 In Linux soltanto l'amministratore può cambiare il proprietario di un file,
index dcbb3381f146bb7cd6d0141571274232de019601..de338feb1a09b4740e1fe298c1947c5016e7d16d 100644 (file)
@@ -223,15 +223,16 @@ prototipi sono:
   stream)}
   Apre il file specificato da \param{path} associandolo allo stream
   specificato da \param{stream}, se questo è già aperto prima lo chiude.
-
-  Le funzioni ritornano un puntatore valido in caso di successo e \macro{NULL}
-  in caso di errore, in tal caso \var{errno} viene settata al valore ricevuto
-  dalla funzione sottostante di cui è fallita l'esecuzione.
   
-  Gli errori pertanto possono essere quelli di \func{malloc} per tutte e tre
-  le funzioni, quelli \func{open} per \func{fopen}, quelli di \func{fcntl} per
-  \func{fdopen} e quelli di \func{fopen}, \func{fclose} e \func{fflush} per
-  \func{freopen}. 
+  \bodydesc{Le funzioni ritornano un puntatore valido in caso di
+    successo e \macro{NULL} in caso di errore, in tal caso \var{errno}
+    viene settata al valore ricevuto dalla funzione sottostante di cui è
+    fallita l'esecuzione.
+  
+    Gli errori pertanto possono essere quelli di \func{malloc} per tutte
+    e tre le funzioni, quelli \func{open} per \func{fopen}, quelli di
+    \func{fcntl} per \func{fdopen} e quelli di \func{fopen},
+    \func{fclose} e \func{fflush} per \func{freopen}.}
 \end{functions}
 
 Normalmente la funzione che si usa per aprire uno stream è \func{fopen},
@@ -432,7 +433,7 @@ 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 \func{clearerr}, il cui prototipo è:
-\begin{prototype}{stdio.h}{void clearerr( FILE *stream)}
+\begin{prototype}{stdio.h}{void clearerr(FILE *stream)}
   Cancella i flag di errore ed end-of-file di \param{stream}. 
 \end{prototype}
 \noindent in genere si usa questa funziona una volta che si sia identificata e
@@ -568,10 +569,9 @@ gestione delle applicazioni multi-thread (si veda
 \label{sec:file_char_io}
 
 La seconda modalità di input/output è quella a caratteri, in cui si
-trasferisce un carattere alla volta.
-
-Le funzioni per la lettura a caratteri sono tre, \func{fgetc},
-\func{getc} e \func{getchar}, i rispettivi prototipi sono:
+trasferisce un carattere alla volta.  Le funzioni per la lettura a
+caratteri sono tre, \func{fgetc}, \func{getc} e \func{getchar}, i
+rispettivi prototipi sono:
 \begin{functions}
   \headdecl{stdio.h} 
 
@@ -583,9 +583,9 @@ Le funzioni per la lettura a caratteri sono tre, \func{fgetc},
   
   \funcdecl{int getchar(void)} è equivalente a \func{getc(stdin)}.
   
-  Tutte queste funzioni leggono un byte alla volta, che viene restituito
-  come intero; in caso di errore o fine del file il valore di ritorno è
-  \macro{EOF}.
+  \bodydesc{Tutte queste funzioni leggono un byte alla volta, che viene
+    restituito come intero; in caso di errore o fine del file il valore
+    di ritorno è \macro{EOF}.}
 \end{functions}
 
 A parte \func{getchar}, che si usa in genere per leggere un carattere da
@@ -623,8 +623,8 @@ byte restituiscono un carattere in formato esteso (cio
   
   \funcdecl{wint\_t getwchar(void)} è equivalente a \func{getwc(stdin)}.
   
-  Tutte queste funzioni leggono un carattere alla volta, in caso di
-  errore o fine del file il valore di ritorno è \macro{WEOF}.
+  \bodydesc{Tutte queste funzioni leggono un carattere alla volta, in
+    caso di errore o fine del file il valore di ritorno è \macro{WEOF}.}
 \end{functions}
 
 Per scrivere un carattere si possono usare tre funzioni analoghe alle
@@ -641,9 +641,9 @@ precedenti usate per leggere: \func{putc}, \func{fputc} e
   
   \funcdecl{int putchar(void)} è equivalente a \func{putc(stdin)}.
   
-\item \noindent Le funzioni scrivono sempre un carattere alla volta,
-  il cui valore viene restituito in caso di successo; in caso di errore
-  o fine del file il valore di ritorno è \macro{EOF}.
+  \bodydesc{Le funzioni scrivono sempre un carattere alla volta, il cui
+    valore viene restituito in caso di successo; in caso di errore o
+    fine del file il valore di ritorno è \macro{EOF}.}
 \end{functions}
 
 Tutte queste funzioni scrivono sempre un byte alla volta, anche se
@@ -666,13 +666,31 @@ loro prototipi sono:
   \funcdecl{int getw(FILE *stream)} Legge una parola da \param{stream}.
   \funcdecl{int putw(int w, FILE *stream)} Scrive la parola \param{w} su
   \param{stream}.
-
-  Le funzioni restituiscono la parola \param{w}, o \macro{EOF} in caso
-  di errore o di fine del file.
+  
+  \bodydesc{Le funzioni restituiscono la parola \param{w}, o \macro{EOF}
+    in caso di errore o di fine del file.}
 \end{functions}
-l'uso di queste funzioni è deprecato in favore dell'uso di \func{fread}
-e \func{fwrite}, in quanto non è possibile distinguere il valore -1 da una
-condizione di errore che restituisce \macro{EOF}.
+\noindent l'uso di queste funzioni è deprecato in favore dell'uso di
+\func{fread} e \func{fwrite}, in quanto non è possibile distinguere il
+valore -1 da una condizione di errore che restituisce \macro{EOF}.
+
+Una degli usi più frequenti dell'input/output a caratteri è nei
+programmi di \textit{parsing} in cui si analizza il testo; in questo
+contesto diventa utile poter analizzare il carattere successivo da uno
+stream senza estrarlo effettivamente (la tecnica è detta \textit{peeking
+  ahead}) in modo che il programma possa regolarsi sulla base avendo
+dato una \textsl{sbirciatina} a quello che viene dopo. 
+
+Nel nostro caso questo tipo di comportamento può essere realizzato prima
+leggendo il carattere, e poi rimandandolo indietro, cosicchè ridiventi
+disponibile per una lettura successiva; la funzione che inverte la
+lettura si chiama \func{ungetc} ed il suo prototipo è:
+\begin{prototype}{stdio.h}{int ungetc(int c, FILE *stream)}
+  Cancella i flag di errore ed end-of-file di \param{stream}. 
+\end{prototype}
+
+
+
 
 
 \subsection{Input/output di linea}
@@ -693,9 +711,9 @@ Le funzioni per leggere una linea sono sostazialmente due, \func{gets} e
   \funcdecl{char * fgets(char * string, int size, FILE *stream)}
   Scrive su \param{string} la linea letta da \param{stream} per un
   massimo di \param{size} byte.
-
-  Le funzioni restituiscono della stringa letta o \macro{NULL} in caso
-  di errore.
+  
+  \bodydesc{Le funzioni restituiscono della stringa letta o \macro{NULL}
+    in caso di errore.}
 \end{functions}
 
 
index 17a68ed645e5a2fc4ad033a422e7ecaf9b40f105..1fe5a7e938dcf34b714f76d14be85a52e9833fb0 100644 (file)
@@ -820,7 +820,7 @@ usare le due funzioni \func{fsync} e \func{fdatasync}, i cui prototipi sono:
   La funzione ritorna 0 in caso di successo e -1 in caso di errore, nel qual
   caso i codici restituiti in \var{errno} sono:
   \begin{errlist}
-  \item \macro{EINVAL} \param{fd} è un file speciale che non supporta la
+  \item[\macro{EINVAL}] \param{fd} è un file speciale che non supporta la
     sincronizzazione.
   \end{errlist}
   ed inoltre \macro{EBADF}, \macro{EROFS} e \macro{EIO}.
@@ -849,14 +849,13 @@ comportamento analogo all'interno di uno stesso processo \textit{duplicando}
 un file descriptor. Per far questo si usa la funzione \func{dup} il cui
 prototipo è:
 \begin{prototype}{unistd.h}{int dup(int oldfd)}
-  
   La funzione crea una copia del file descriptor \param{oldfd}.
   
   La funzione ritorna il nuovo file descriptor in caso di successo e -1 in
   caso di errore, nel qual caso \var{errno} viene settata ad uno dei valori:
   \begin{errlist}
-  \item \macro{EBADF} \param{oldfd} non è un file aperto.
-  \item \macro{EMFILE} si è raggiunto il numero massimo consentito di file
+  \item[\macro{EBADF}] \param{oldfd} non è un file aperto.
+  \item[\macro{EMFILE}] si è raggiunto il numero massimo consentito di file
     descriptor aperti.
   \end{errlist}
 \end{prototype}
index 632737d2721615e6b709bb0b45b51d5961ad6331..c4fd5792318ca023eb27c5440eedb72f9e560a1b 100644 (file)
--- a/macro.tex
+++ b/macro.tex
@@ -67,27 +67,27 @@ tab.~\thechapter.\theusercount}
 \newenvironment{prototype}[2]
 {% defining what is done by \begin
   \center
-  \footnotesize
   \begin{minipage}[c]{14cm}
-    \par \texttt{\#include <#1>}
-%    \par \ 
-    \par \texttt{#2}
+  \footnotesize
+    \begin{description*}{}{} 
+    \item \texttt{\#include <#1>}
+    \item \texttt{#2} \par
 %   \begin{lstlisting}{}
 % #1
 % #2
 %   \end{lstlisting}
-  \begin{list}{}{} 
-    \item 
 }
 {% defining what is done by \end
-  \end{list} 
-  \par 
-\par \texttt{ }
-\end{minipage} 
-\normalsize 
+%  \end{list} 
+%  \par 
+\end{description*}
+\end{minipage}
+\vspace{6pt}
 \par
+\normalsize 
 }
-\newenvironment{errlist}{\begin{description*}}{\end{description*}}
+\newenvironment{errlist}{\begin{basedescript}{\desclabelwidth{1.5cm}}}
+{\end{basedescript}}
 
 %
 % Slighty different envirnoment to be used for multi-header, 
@@ -95,6 +95,8 @@ tab.~\thechapter.\theusercount}
 %
 \newcommand{\headdecl}[1]{\item\texttt{\#include <#1>}}
 \newcommand{\funcdecl}[1]{\item\texttt{#1}\par}
+\newcommand{\bodydesc}[1]{\par\end{description*}\par #1
+\begin{description*}{}{} \baselineskip=0pt\item} 
 \newenvironment{functions}
 {% defining what is done by \begin
   \center
@@ -104,7 +106,6 @@ tab.~\thechapter.\theusercount}
 }
 {% defining what is done by \end
       \end{description*}
-      \par 
     \end{minipage}
     \vspace{6pt}
     \par
index f0bc1595db69c51a29690fc133d149599a05fd2b..42781334410eabf708cd15968f1355cd99a8419f 100644 (file)
@@ -601,21 +601,22 @@ avere con le variabili automatiche, su cui torneremo in
 L'uso di queste funzioni è necessario solo quando si voglia accedere alle
 analoghe system call a cui fanno da interfaccia (ad esempio per implementare
 una propria versione di \func{malloc}. Le funzioni sono:
-\begin{prototype}{unistd.h}{int *brk(void end\_data\_segment)}
+\begin{functions}
+  \headdecl{unistd.h}
+  \funcdecl{int *brk(void end\_data\_segment)}
   Sposta la fine del segmento dei dati all'indirizzo specificato da
   \var{end\_data\_segment}.
   
   La funzione restituisce 0 in caso di successo e -1 in caso di fallimento,
   nel qual caso \var{errno} viene settata a \macro{ENOMEM}.
-\end{prototype}
-\begin{prototype}{unistd.h}{int *sbrk(ptrdiff\_t increment)}
+  \funcdecl{int *sbrk(ptrdiff\_t increment)}
   Incrementa lo spazio dati di un programma di \var{increment}. Un valore
   zero restituisce l'attuale posizione della fine del segmento dati.
   
   La funzione restituisce il puntatore all'inizio della nuova zona di memoria
   allocata in caso di successo e \macro{NULL} in caso di fallimento, nel qual
   caso \macro{errno} viene settata a \macro{ENOMEM}.
-\end{prototype}
+\end{functions}
 
 Queste funzioni sono state deliberatamente escluse dallo standard POSIX.1 e
 per i programmi normali è opportuno usare le funzioni di allocazione standard
@@ -708,28 +709,23 @@ Le funzioni per bloccare e sbloccare singole sezioni di memoria sono
   \var{len} byte. Tutte le pagine che contengono una parte dell'intervallo
   sono mantenute in RAM per tutta la durata del blocco.
 
-  La funzione ritorna 0 in caso di successo e -1 in caso di errore, nel qual
-  caso \var{errno} è settata ad uno dei valori seguenti:
-  \begin{errlist}
-  \item \macro{ENOMEM} alcuni indirizzi dell'intervallo specificato non
-    corrispondono allo spazio di indirizzi del processo o si è ecceduto il
-    numero massimo consentito di pagine bloccate.
-  \item \macro{EPERM} il processo non ha i privilegi richiesti per
-    l'operazione. 
-  \item \macro{EINVAL} \var{len} non è un valore positivo.
-  \end{errlist}
-  
   \funcdecl{int munlock(const void *addr, size\_t len)}
   Alloca \var{size} byte nello heap. La memoria non viene inizializzata.
 
-  Sblocca l'intervallo di memoria da \var{addr} per \var{len} byte.  La
-  funzione ritorna 0 in caso di successo e -1 in caso di errore, nel qual caso
-  \var{errno} è settata ad uno dei valori seguenti:
+  Sblocca l'intervallo di memoria da \var{addr} per \var{len} byte.  
+
+  
+  \bodydesc{Entrambe le funzioni ritornano 0 in caso di successo e -1 in
+    caso di errore, nel qual caso \var{errno} è settata ad uno dei
+    valori seguenti:
   \begin{errlist}
-  \item \macro{ENOMEM} alcuni indirizzi dell'intervallo specificato non
-    corrispondono allo spazio di indirizzi del processo.
-  \item \macro{EINVAL} \var{len} non è un valore positivo.
+  \item[\macro{ENOMEM}] alcuni indirizzi dell'intervallo specificato non
+    corrispondono allo spazio di indirizzi del processo o si è ecceduto
+    il numero massimo consentito di pagine bloccate.
+  \item[\macro{EINVAL}] \var{len} non è un valore positivo.
   \end{errlist}
+  e, per \func{mlock}, anche \macro{EPERM} quando il processo non ha i
+  privilegi richiesti per l'operazione.}
 \end{functions}
 
 Altre due funzioni, \func{mlockall} e \func{munlockall}, consentono di
@@ -742,12 +738,11 @@ queste funzioni sono:
   \funcdecl{int mlockall(int flags)}
   Blocca la paginazione per lo spazio di indirizzi del processo corrente. 
   
-  Codici di ritorno ed errori sono gli stessi di \func{mlock}.
-
   \funcdecl{int munlockall(void)}
   Sblocca la paginazione per lo spazio di indirizzi del processo corrente. 
   
-  Codici di ritorno ed errori sono gli stessi di \func{munlock}.
+  \bodydesc{Codici di ritorno ed errori sono gli stessi di \func{mlock}
+    e \func{munlock}.}
 \end{functions}
 
 Il parametro \var{flags} di \func{mlockall} permette di controllarne il
index 1592ce14361f69cca0ed44138de87babcb3603ed..685827ad30f0149e6661ab413fafe5c703155d8c 100644 (file)
@@ -194,7 +194,7 @@ ottenuti da programma usando le funzioni:
 \funcdecl{pid\_t getppid(void)} restituisce il pid del padre del processo
     corrente.
 
-Entrambe le funzioni non riportano condizioni di errore. 
+\bodydesc{Entrambe le funzioni non riportano condizioni di errore.}
 \end{functions}
 \noindent esempi dell'uso di queste funzioni sono riportati in
 \figref{fig:proc_fork_code}, nel programma di esempio \file{ForkTest.c}.
@@ -238,10 +238,10 @@ prototipo della funzione 
   ritorna -1 al padre (senza creare il figlio) in caso di errore;
   \texttt{errno} può assumere i valori:
   \begin{errlist}
-  \item \macro{EAGAIN} non ci sono risorse sufficienti per creare un'altro
+  \item[\macro{EAGAIN}] non ci sono risorse sufficienti per creare un'altro
     processo (per allocare la tabella delle pagine e le strutture del task) o
     si è esaurito il numero di processi disponibili.
-  \item \macro{ENOMEM} non è stato possibile allocare la memoria per le
+  \item[\macro{ENOMEM}] non è stato possibile allocare la memoria per le
     strutture necessarie al kernel per creare il nuovo processo.
   \end{errlist}
 \end{functions}
@@ -563,9 +563,10 @@ le differenze fra padre e figlio dopo la \func{fork} invece sono:
 \item il \textit{process id}. 
 \item il \textit{parent process id} (quello del figlio viene settato al
   \acr{pid} del padre).
-\item i valori dei tempi di esecuzione (\var{tms\_utime}, \var{tms\_stime},
-  \var{tms\_cutime}, \var{tms\_uetime}) che nel figlio sono posti a zero.
-\item i \textit{file lock} (vedi \secref{sec:file_locking}, che non vengono ereditati dal figlio.
+\item i valori dei tempi di esecuzione (vedi \secref{sec:sys_xxx}) che
+  nel figlio sono posti a zero.
+\item i \textit{file lock} (vedi \secref{sec:file_locking}), che non
+  vengono ereditati dal figlio.
 \item gli allarmi ed i segnali pendenti (vedi \secref{sec:sig_xxx}), che per il figlio vengono cancellati.
 \end{itemize*}
 
@@ -624,13 +625,15 @@ eseguite alla chiusura di un processo 
 \item tutti i descrittori dei file sono chiusi.
 \item viene memorizzato lo stato di terminazione del processo.
 \item ad ogni processo figlio viene assegnato un nuovo padre.
-\item viene inviato il segnale \macro{SIGCHLD} al processo padre.
+\item viene inviato il segnale \macro{SIGCHLD} al processo padre (vedi
+  \secref{sec:sig_xxx}) .
 \item se il processo è un leader di sessione viene mandato un segnale di
-  \macro{SIGHUP} a tutti i processi in background e il terminale di controllo
-  viene disconnesso.
-\item se la conclusione di un processo rende orfano un \textit{process group}
-  ciascun membro del gruppo viene bloccato, e poi gli vengono inviati in
-  successione i segnali \macro{SIGHUP} e \macro{SIGCONT}.
+  \macro{SIGHUP} a tutti i processi in background e il terminale di
+  controllo viene disconnesso (vedi \secref{sec:sess_xxx}).
+\item se la conclusione di un processo rende orfano un \textit{process
+    group} ciascun membro del gruppo viene bloccato, e poi gli vengono
+  inviati in successione i segnali \macro{SIGHUP} e \macro{SIGCONT}
+  (vedi \secref{sec:sess_xxx}).
 \end{itemize*}
 ma al di la di queste operazioni è necessario poter disporre di un meccanismo
 ulteriore che consenta di sapere come questa terminazione è avvenuta; dato che
@@ -777,29 +780,34 @@ prototipo 
 \funcdecl{pid\_t wait(int * status)} 
 
 Sospende il processo corrente finché un figlio non è uscito, o finché un
-segnale termina il processo o chiama una funzione di gestione. Se un figlio è
-già uscito la funzione ritorna immediatamente. Al ritorno lo stato di
-termininazione del processo viene salvato nella variabile puntata da
-\var{status} e tutte le informazioni relative al processo (vedi
-\secref{sec:proc_termination}) vengono rilasciate.
+segnale termina il processo o chiama una funzione di gestione. 
 
+
+\bodydesc{
 La funzione restituisce il \acr{pid} del figlio in caso di successo e -1 in
 caso di errore; \var{errno} può assumere i valori:
   \begin{errlist}
-  \item \macro{EINTR} la funzione è stata interrotta da un segnale.
+  \item[\macro{EINTR}] la funzione è stata interrotta da un segnale.
   \end{errlist}
+}
 \end{functions}
-
+\noindent
 è presente fin dalle prime versioni di unix; la funzione ritorna alla
-conclusione del primo figlio (o immediatamente se un figlio è già uscito). Nel
-caso un processo abbia più figli il valore di ritorno permette di identificare
-qual'è quello che è uscito.
-
-Questa funzione però ha il difetto di essere poco flessibile, in quanto
-ritorna all'uscita di un figlio qualunque. Nelle occasioni in cui è necessario
-attendere la conclusione di un processo specifico occorre predisporre un
-meccanismo che tenga conto dei processi già terminati, e ripeta la chiamata
-alla funzione nel caso il processo cercato sia ancora attivo.
+conclusione del primo figlio (o immediatamente se un figlio è già
+uscito). Se un figlio è già uscito la funzione ritorna immediatamente.
+
+Al ritorno lo stato di termininazione del processo viene salvato nella
+variabile puntata da \var{status} e tutte le informazioni relative al
+processo (vedi \secref{sec:proc_termination}) vengono rilasciate.  Nel
+caso un processo abbia più figli il valore di ritorno permette di
+identificare qual'è quello che è uscito.
+
+Questa funzione ha il difetto di essere poco flessibile, in quanto
+ritorna all'uscita di un figlio qualunque. Nelle occasioni in cui è
+necessario attendere la conclusione di un processo specifico occorre
+predisporre un meccanismo che tenga conto dei processi già terminati, e
+provveda a ripetere la chiamata alla funzione nel caso il processo
+cercato sia ancora attivo.
 
 Per questo motivo lo standard POSIX.1 ha introdotto la funzione \func{waitpid}
 che effettua lo stesso servizio, ma dispone di una serie di funzionalità più
@@ -815,9 +823,9 @@ La funzione restituisce il \acr{pid} del processo che 
 specificata l'opzione \macro{WNOHANG} e il processo non è uscito e -1 per un
 errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item \macro{EINTR} se non è stata specificata l'opzione \macro{WNOHANG} e
+  \item[\macro{EINTR}] se non è stata specificata l'opzione \macro{WNOHANG} e
     la funzione è stata interrotta da un segnale.
-  \item \macro{ECHILD} il processo specificato da \var{pid} non esiste o non è
+  \item[\macro{ECHILD}] il processo specificato da \var{pid} non esiste o non è
     figlio del processo chiamante.
   \end{errlist}
 \end{functions}
@@ -954,7 +962,7 @@ accessibili definendo la costante \macro{\_USE\_BSD}, sono:
     * rusage)} 
   La funzione è identica a \func{waitpid} sia per comportamento che per i
   valori dei parametri, ma restituisce in \var{rusage} un sommario delle
-  risorse usate dal processo (per i dettagli vedi \secref{sec:xxx_limit_res})
+  risorse usate dal processo (per i dettagli vedi \secref{sec:sys_xxx})
   \funcdecl{pid\_t wait3(int *status, int options, struct rusage *rusage)}
   Prima versione, equivalente a \func{wait4(-1, \&status, opt, rusage)} è
   ormai deprecata in favore di \func{wait4}.
@@ -962,7 +970,7 @@ accessibili definendo la costante \macro{\_USE\_BSD}, sono:
 \noindent 
 la struttura \type{rusage} è definita in \file{sys/resource.h}, e viene
 utilizzata anche dalla funzione \func{getrusage} per ottenere le risorse di
-sistema usate dal processo; in Linux è definita come:
+sistema usate dal processo; la sua definizione è riportata in \nfig.
 \begin{figure}[!htb]
   \footnotesize
   \centering
@@ -993,12 +1001,13 @@ struct rusage {
     delle risorse usate da un processo.}
   \label{fig:proc_rusage_struct}
 \end{figure}
-In genere includere esplicitamente \file{<sys/time.h>} non è più necessario,
-ma aumenta la portabilità, e serve in caso si debba accedere ai campi di
-\var{rusage} definiti come \type{struct timeval}. La struttura è ripresa dalla
-versione 4.3 Reno di BSD, attualmente (con il kernel 2.4.x) i soli campi che
-sono mantenuti sono: \var{ru\_utime}, \var{ru\_stime}, \var{ru\_minflt},
-\var{ru\_majflt}, e \var{ru\_nswap}.
+
+In genere includere esplicitamente \file{<sys/time.h>} non è più
+necessario, ma aumenta la portabilità, e serve in caso si debba accedere
+ai campi di \var{rusage} definiti come \type{struct timeval}. La
+struttura è ripresa da BSD 4.3, attualmente (con il kernel 2.4.x) i soli
+campi che sono mantenuti sono: \var{ru\_utime}, \var{ru\_stime},
+\var{ru\_minflt}, \var{ru\_majflt}, e \var{ru\_nswap}.
 
 
 \subsection{Le funzioni \func{exec}}
@@ -1019,37 +1028,40 @@ realt
 front-end a \func{execve}. Il prototipo  di quest'ultima è:
 \begin{prototype}{unistd.h}
 {int execve(const char * filename, char * const argv [], char * const envp[])}
+  Esegue il programma contenuto nel file \param{filename}.
   
-  La funzione esegue il file o lo script indicato da \var{filename},
-  passandogli la lista di argomenti indicata da \var{argv} e come ambiente la
-  lista di stringhe indicata da \var{envp}; entrambe le liste devono essere
-  terminate da un puntatore nullo. I vettori degli argomenti e dell'ambiente
-  possono essere acceduti dal nuovo programma quando la sua funzione
-  \func{main} è dichiarata nella forma \func{main(int argc, char *argv[], char
-    *envp[])}.
-
-  La funzione ritorna -1 solo in caso di errore, nel qual caso caso la
-  \var{errno} può assumere i valori:
+  \bodydesc{La funzione ritorna -1 solo in caso di errore, nel qual caso
+    caso la \var{errno} può assumere i valori:
   \begin{errlist}
-  \item \macro{EACCES} il file non è eseguibile, oppure il filesystem è
+  \item[\macro{EACCES}] il file non è eseguibile, oppure il filesystem è
     montato in \cmd{noexec}, oppure non è un file normale o un interprete.
-  \item \macro{EPERM} il file ha i bit \acr{suid} o \acr{sgid} ma l'utente non
+  \item[\macro{EPERM}] il file ha i bit \acr{suid} o \acr{sgid} ma l'utente non
     è root o il filesystem è montato con \cmd{nosuid}, oppure
-  \item \macro{ENOEXEC} il file è in un formato non eseguibile o non
+  \item[\macro{ENOEXEC}] il file è in un formato non eseguibile o non
     riconosciuto come tale, o compilato per un'altra architettura.
-  \item \macro{ENOENT} il file o una delle librerie dinamiche o l'interprete
+  \item[\macro{ENOENT}] il file o una delle librerie dinamiche o l'interprete
     necessari per eseguirlo non esistono.
-  \item \macro{ETXTBSY} L'eseguibile è aperto in scrittura da uno o più
+  \item[\macro{ETXTBSY}] L'eseguibile è aperto in scrittura da uno o più
     processi. 
-  \item \macro{EINVAL} L'eseguibile ELF ha più di un segmento
-    \macro{PF\_INTERP}, cioè chiede di essere eseguito da più di un interprete.
-  \item \macro{ELIBBAD} Un interprete ELF non è in un formato  riconoscibile.
+  \item[\macro{EINVAL}] L'eseguibile ELF ha più di un segmento
+    \macro{PF\_INTERP}, cioè chiede di essere eseguito da più di un
+    interprete.
+  \item[\macro{ELIBBAD}] Un interprete ELF non è in un formato
+    riconoscibile.
   \end{errlist}
   ed inoltre anche \macro{EFAULT}, \macro{ENOMEM}, \macro{EIO},
   \macro{ENAMETOOLONG}, \macro{E2BIG}, \macro{ELOOP}, \macro{ENOTDIR},
-  \macro{ENFILE}, \macro{EMFILE}.
+  \macro{ENFILE}, \macro{EMFILE}.}
 \end{prototype}
 
+La funzione \func{exec} esegue il file o lo script indicato da
+\var{filename}, passandogli la lista di argomenti indicata da \var{argv}
+e come ambiente la lista di stringhe indicata da \var{envp}; entrambe le
+liste devono essere terminate da un puntatore nullo. I vettori degli
+argomenti e dell'ambiente possono essere acceduti dal nuovo programma
+quando la sua funzione \func{main} è dichiarata nella forma
+\func{main(int argc, char *argv[], char *envp[])}.
+
 Le altre funzioni della famiglia servono per fornire all'utente una serie
 possibile di diverse interfacce per la creazione di un nuovo processo. I loro
 prototipi sono:
@@ -1066,9 +1078,9 @@ Sostituiscono l'immagine corrente del processo con quella indicata nel primo
 argomento. I parametri successivi consentono di specificare gli argomenti a
 linea di comando e l'ambiente ricevuti dal nuovo processo.
 
-Queste funzioni ritornano solo in caso di errore, restituendo -1; nel qual
-caso \var{errno} andrà ad assumere i valori visti in precedenza per
-\func{execve}.
+\bodydesc{Queste funzioni ritornano solo in caso di errore, restituendo
+  -1; nel qual caso \var{errno} andrà ad assumere i valori visti in
+  precedenza per \func{execve}.}
 \end{functions}
 
 Per capire meglio le differenze fra le funzioni della famiglia si può fare
@@ -1347,7 +1359,7 @@ prototipi sono i seguenti:
   \funcdecl{gid\_t getegid(void)} restituisce l'\textit{effective group ID} del
   processo corrente.
   
-  \noindent Queste funzioni non riportano condizioni di errore. 
+  \bodydesc{Queste funzioni non riportano condizioni di errore.}
 \end{functions}
 
 In generale l'uso di privilegi superiori deve essere limitato il più
@@ -1408,8 +1420,8 @@ corrente.
 \funcdecl{int setgid(gid\_t gid)} setta il \textit{group ID} del processo
 corrente.
 
-Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento:
-l'unico errore possibile è \macro{EPERM}. 
+\bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso
+  di fallimento: l'unico errore possibile è \macro{EPERM}.}
 \end{functions}
 
 Il funzionamento di queste due funzioni è analogo, per cui considereremo solo
@@ -1509,8 +1521,8 @@ specificati da \var{ruid} e \var{euid}.
   ID} e l'\textit{effective group ID} del processo corrente ai valori
 specificati da \var{rgid} e \var{egid}.
 
-Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento:
-l'unico errore possibile è \macro{EPERM}. 
+\bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso
+  di fallimento: l'unico errore possibile è \macro{EPERM}.}
 \end{functions}
 
 I processi non privilegiati possono settare i \textit{real id} soltanto ai
@@ -1565,8 +1577,8 @@ e permettono un completo controllo su tutti gli identificatori (\textit{real},
   ID} del processo corrente ai valori specificati rispettivamente da
 \var{rgid}, \var{egid} e \var{sgid}.
 
-Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento:
-l'unico errore possibile è \macro{EPERM}. 
+\bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso
+  di fallimento: l'unico errore possibile è \macro{EPERM}.}
 \end{functions}
 
 I processi non privilegiati possono cambiare uno qualunque degli
@@ -1593,8 +1605,8 @@ processo corrente a \var{uid}.
 \funcdecl{int setegid(gid\_t gid)} setta l'\textit{effective group ID} del
 processo corrente a \var{gid}.
 
-Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento:
-l'unico errore possibile è \macro{EPERM}. 
+\bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso
+  di fallimento: l'unico errore possibile è \macro{EPERM}.}
 \end{functions}
 
 Gli utenti normali possono settare l'\textit{effective id} solo al valore del
@@ -1637,8 +1649,8 @@ processo corrente a \var{fsuid}.
 \funcdecl{int setfsgid(gid\_t fsgid)} setta l'\textit{filesystem group ID} del
 processo corrente a \var{fsgid}.
 
-Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento:
-l'unico errore possibile è \macro{EPERM}. 
+\bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso
+  di fallimento: l'unico errore possibile è \macro{EPERM}.}
 \end{functions}
 
 Queste funzioni hanno successo solo se il processo chiamante ha i privilegi di
index 6391861615fea46c486a14bcfdac023218986542..bd5822bda1efad5c501e1a5465467e73eef83b59 100644 (file)
@@ -18,7 +18,7 @@ varie risorse associate ad un processo ed i relativi limiti, e quelle
 relatica al sistema in quanto tale. 
 
 
-
+\var{tms\_utime}, \var{tms\_stime}, \var{tms\_cutime}, \var{tms\_uetime}
 
 \section{La gestione dei tempi del sistema}
 \label{sec:sys_time}