Ordinamento alfabetico degli errori ed un po' di revisione
authorSimone Piccardi <piccardi@gnulinux.it>
Sat, 19 May 2012 20:00:19 +0000 (20:00 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sat, 19 May 2012 20:00:19 +0000 (20:00 +0000)
filedir.tex
fileio.tex
signal.tex
system.tex

index 79e5823e27f55c823b07697b4f75aa13d306075a..2891b774c2f01ac691513b32f0c2d9d6fc9985d2 100644 (file)
@@ -866,8 +866,8 @@ nell'elenco seguente:
   il controllo dei contenuti, in particolar modo quelli posti su dispositivi
   rimuovibili. In questo modo si evitano alla radice possibili situazioni in
   cui un utente malizioso inserisce su uno di questi filesystem dei file di
-  dispositivo con permessi ``opportunamente'' ampliati che gli consentano di
-  accedere anche a risorse cui non dovrebbe.
+  dispositivo con permessi ``opportunamente'' ampliati che gli consentirebbero
+  di accedere anche a risorse cui non dovrebbe.
 
 \item[\const{MS\_NODIRATIME}] Viene disabilitato sul filesystem
   l'aggiornamento degli \textit{access time} (vedi
@@ -1123,11 +1123,11 @@ un 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}
+     \item[\errcode{EAGAIN}] si è chiamata la funzione con \const{MNT\_EXPIRE}
+       ed il filesystem non era occupato.
      \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{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
@@ -1790,13 +1790,13 @@ sistema \funcd{rename},\footnote{la funzione è definita dallo standard ANSI C,
     parte di qualche processo (come \index{directory~di~lavoro} directory di
     lavoro o come radice) o del sistema (come \itindex{mount~point}
     \textit{mount point}) ed il sistema non riesce a risolvere la situazione.
+  \item[\errcode{EEXIST}] \param{newpath} è una directory già esistente e
+    non è vuota (anche \errcode{ENOTEMPTY}).
   \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 sé stessa.
   \item[\errcode{EISDIR}] \param{newpath} è una directory mentre
     \param{oldpath} non è una directory.
-  \item[\errcode{EEXIST}] \param{newpath} è una directory già esistente e
-    non è vuota (anche \errcode{ENOTEMPTY}).
   \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.
@@ -1944,11 +1944,11 @@ necessaria una specifica funzione di sistema, \funcd{rmdir}, il suo prototipo
     che contiene la directory che si vuole cancellare, o non c'è il permesso
     di attraversare (esecuzione) una delle directory specificate in
     \param{dirname}.
-  \item[\errcode{EINVAL}] si è usato ``\texttt{.}'' come ultimo componente
-    di \param{dirname}.
   \item[\errcode{EBUSY}] la directory specificata è la
     \index{directory~di~lavoro} directory di lavoro o la radice di qualche
     processo o un \itindex{mount~point} \textit{mount point}.
+  \item[\errcode{EINVAL}] si è usato ``\texttt{.}'' come ultimo componente
+    di \param{dirname}.
   \item[\errcode{EPERM}] il filesystem non supporta la cancellazione di
     directory, oppure la directory che contiene \param{dirname} ha lo
     \itindex{sticky~bit} \textit{sticky bit} impostato e non si è i
@@ -2621,7 +2621,7 @@ appunto per \textit{change directory}, il suo prototipo è:
     di \param{pathname}.
   \item[\errcode{ENOTDIR}] non si è specificata una directory.
   \end{errlist}
-  ed inoltre \errval{EFAULT}, \errval{ELOOP}, \errval{EIO},
+  ed inoltre \errval{EFAULT}, \errval{EIO}, \errval{ELOOP},
   \errval{ENAMETOOLONG}, \errval{ENOENT} e \errval{ENOMEM} nel loro
   significato generico.}
 \end{funcproto}
@@ -3004,9 +3004,9 @@ prototipo è:
   errore, nel qual 
   caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
-    \item[\errcode{EINVAL}] \param{template} non termina con \code{XXXXXX}.
     \item[\errcode{EEXIST}] non è riuscita a creare un file temporaneo, il
       contenuto di \param{template} è indefinito.
+    \item[\errcode{EINVAL}] \param{template} non termina con \code{XXXXXX}.
   \end{errlist}}
 \end{funcproto}
 
@@ -5503,7 +5503,7 @@ ACL di un file; i rispettivi prototipi sono:
 {Le funzioni ritornano un oggetto di tipo \type{acl\_t} in caso di successo e
   \val{NULL} per un errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{ACCESS}] non c'è accesso per una componente di
+  \item[\errcode{EACCESS}] non c'è accesso per una componente di
     \param{path\_p} o si è richiesta una ACL di default per un file (solo per
     \func{acl\_get\_file}).
   \item[\errcode{EINVAL}] \param{type} non ha un valore valido (solo per
@@ -5563,9 +5563,9 @@ testuale con la funzione  \funcd{acl\_from\_text}, il cui prototipo è:
   \val{NULL} per un errore, nel qual caso \var{errno} assumerà uno
   dei valori:
   \begin{errlist}
-  \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
   \item[\errcode{EINVAL}] la rappresentazione testuale all'indirizzo
     \param{buf\_p} non è valida.
+  \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
    \end{errlist}
 }
 \end{funcproto}
@@ -5636,8 +5636,8 @@ di uso più immediato, è \funcd{acl\_to\_text}, ed il suo prototipo è:
   testuale della ACL in caso di successo e \var{NULL} per un errore, nel qual
   caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
   \item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida.
+  \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
   \end{errlist}
 }  
 \end{funcproto}
@@ -5667,9 +5667,9 @@ testuale della ACL, è \funcd{acl\_to\_any\_text}, ed il suo prototipo è:
   testuale della ACL in caso di successo e \val{NULL} per un errore, nel qual
   caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
   \item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida.
-   \end{errlist}
+  \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
+  \end{errlist}
 }  
 \end{funcproto}
 
index 883e8293731068474a2ef3936e8de17748e5e349..74193f4853769b3eb407079c9f8d63754743af37 100644 (file)
@@ -753,9 +753,9 @@ funzione di sistema \funcd{lseek}, il cui prototipo è:
 {La funzione ritorna il valore della posizione sul file in caso di successo e
   $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-    \item[\errcode{ESPIPE}] \param{fd} è una pipe, un socket o una fifo.
     \item[\errcode{EINVAL}] \param{whence} non è un valore valido.
     \item[\errcode{EOVERFLOW}] \param{offset} non può essere rappresentato nel
+    \item[\errcode{ESPIPE}] \param{fd} è una pipe, un socket o una fifo.
       tipo \type{off\_t}.
   \end{errlist}
   ed inoltre \errval{EBADF} nel suo significato generico.}
@@ -1055,7 +1055,7 @@ prototipo è:
 {La funzione ritorna il numero di byte scritti in caso di successo e $-1$ per
   un errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{EAGAIN}] ci si sarebbe bloccati, ma il file era aperto in
+  \item[\errcode{EAGAIN}] ci siq sarebbe bloccati, ma il file era aperto in
     modalità \const{O\_NONBLOCK}.
   \item[\errcode{EFBIG}] si è cercato di scrivere oltre la dimensione massima
     consentita dal filesystem o il limite per le dimensioni dei file del
@@ -1487,7 +1487,7 @@ prototipi sono:
   \item[\errcode{EINVAL}] \param{fd} è un \index{file!speciali} file speciale
     che non supporta la sincronizzazione.
   \end{errlist}
-  ed inoltre \errval{EBADF}, \errval{EROFS} e \errval{EIO} nel loro
+  ed inoltre \errval{EBADF}, \errval{EIO} e \errval{EROFS} nel loro
   significato generico.}
 \end{funcproto}
 
@@ -2258,11 +2258,11 @@ per compiere operazioni specializzate; il suo prototipo è:
   sempre $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei
   valori:
   \begin{errlist}
+  \item[\errcode{EINVAL}] gli argomenti \param{request} o \param{argp} non sono
+    validi.
   \item[\errcode{ENOTTY}] il file \param{fd} non è associato con un
     dispositivo, o la richiesta non è applicabile all'oggetto a cui fa
     riferimento \param{fd}.
-  \item[\errcode{EINVAL}] gli argomenti \param{request} o \param{argp} non sono
-    validi.
   \end{errlist}
   ed inoltre \errval{EBADF} e \errval{EFAULT} nel loro significato generico.}
 \end{funcproto}
index c755b31229b6395f65475081d7deb89a12d07adf..7af26cfd12520ec5fd30acc061098c0a32880872 100644 (file)
@@ -1163,10 +1163,10 @@ che consente effettivamente di inviare un segnale generico ad un processo, il
   caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
     \item[\errcode{EINVAL}] il segnale specificato non esiste.
-    \item[\errcode{ESRCH}] il processo o il gruppo di processi indicato non
-      esiste.
     \item[\errcode{EPERM}] non si hanno privilegi sufficienti ad inviare il
       segnale.
+    \item[\errcode{ESRCH}] il processo o il gruppo di processi indicato non
+      esiste.
   \end{errlist}
 }
 \end{funcproto}
@@ -1611,9 +1611,9 @@ favore della nuova funzione di sistema \funcd{nanosleep}, il cui prototipo è:
 {La funzione ritorna $0$ se l'attesa viene completata e $-1$ per un errore,
   nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
+    \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
     \item[\errcode{EINVAL}] si è specificato un numero di secondi negativo o un
       numero di nanosecondi maggiore di 999.999.999.
-    \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
   \end{errlist}
 }
 \end{funcproto}
@@ -2020,10 +2020,10 @@ essere gestito da un processo. 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}
+  \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
   \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido o si è
     cercato di installare il gestore per \signal{SIGKILL} o
     \signal{SIGSTOP}.
-  \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
   \end{errlist}
 }
 \end{funcproto}
@@ -2414,8 +2414,8 @@ funzione di sistema \funcd{sigprocmask}, il cui 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}
-  \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
   \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
+  \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
   \end{errlist}
 }
 \end{funcproto}
@@ -2480,8 +2480,8 @@ sospensione del processo lo standard POSIX ha previsto la funzione di sistema
 {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{EINVAL}] si è specificato un numero di segnale invalido.
   \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
+  \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
   \end{errlist}
 }
 \end{funcproto}
@@ -2744,11 +2744,12 @@ sez.~\ref{sec:ipc_posix_mq}), pertanto devono essere inviati esplicitamente.
 Inoltre, per poter usufruire della capacità di restituire dei dati, i relativi
 gestori devono essere installati con \func{sigaction}, specificando per
 \var{sa\_flags} la modalità \const{SA\_SIGINFO} che permette di utilizzare la
-forma estesa \var{sa\_sigaction} (vedi sez.~\ref{sec:sig_sigaction}) del
-gestore.  In questo modo tutti i segnali \textit{real-time} possono restituire
-al gestore una serie di informazioni aggiuntive attraverso l'argomento
-\struct{siginfo\_t}, la cui definizione è stata già vista in
-fig.~\ref{fig:sig_siginfo_t}, nella trattazione dei gestori in forma estesa.
+forma estesa \var{sa\_sigaction} del gestore (vedi
+sez.~\ref{sec:sig_sigaction}).  In questo modo tutti i segnali
+\textit{real-time} possono restituire al gestore una serie di informazioni
+aggiuntive attraverso l'argomento \struct{siginfo\_t}, la cui definizione è
+stata già vista in fig.~\ref{fig:sig_siginfo_t}, nella trattazione dei gestori
+in forma estesa.
 
 In particolare i campi utilizzati dai segnali \textit{real-time} sono
 \var{si\_pid} e \var{si\_uid} in cui vengono memorizzati rispettivamente il
@@ -2827,44 +2828,45 @@ segnali \textit{real-time} (priorità e coda) saranno perse.
 Secondo lo standard POSIX la profondità della coda è indicata dalla costante
 \const{SIGQUEUE\_MAX}, una della tante costanti di sistema definite dallo
 standard POSIX che non abbiamo riportato esplicitamente in
-sez.~\ref{sec:sys_limits}, il suo valore minimo secondo lo standard,
+sez.~\ref{sec:sys_limits}. Il suo valore minimo secondo lo standard,
 \const{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32. Nel caso di Linux la coda ha una
 dimensione variabile; fino alla versione 2.6.7 c'era un limite massimo globale
 che poteva essere impostato come parametro del kernel in
-\sysctlfile{kernel/rtsig-max};\footnote{ed il valore predefinito era pari a
-  1024.} a partire dal kernel 2.6.8 il valore globale è stato rimosso e
-sostituito dalla risorsa \const{RLIMIT\_SIGPENDING} associata al singolo
-utente, che può essere modificata con \func{setrlimit} come illustrato in
+\sysctlfile{kernel/rtsig-max} ed il valore predefinito era pari a 1024. A
+partire dal kernel 2.6.8 il valore globale è stato rimosso e sostituito dalla
+risorsa \const{RLIMIT\_SIGPENDING} associata al singolo utente, che può essere
+modificata con \func{setrlimit} come illustrato in
 sez.~\ref{sec:sys_resource_limit}.
 
-Lo standard POSIX.1b definisce inoltre delle nuove funzioni che permettono di
-gestire l'attesa di segnali specifici su una coda, esse servono in particolar
-modo nel caso dei \itindex{thread} \textit{thread}, in cui si possono usare i
-segnali \textit{real-time} come meccanismi di comunicazione elementare; la
-prima di queste funzioni è \funcd{sigwait}, il cui prototipo è:
-\begin{prototype}{signal.h}
-  {int sigwait(const sigset\_t *set, int *sig)}
-  
-  Attende che uno dei segnali specificati in \param{set} sia pendente.
-  
-  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
-    errore, nel qual caso \var{errno} assumerà uno dei valori:
+Lo standard POSIX.1b definisce inoltre delle nuove funzioni di sistema che
+permettono di gestire l'attesa di segnali specifici su una coda, esse servono
+in particolar modo nel caso dei \itindex{thread} \textit{thread}, in cui si
+possono usare i segnali \textit{real-time} come meccanismi di comunicazione
+elementare; la prima di queste è \funcd{sigwait}, il cui prototipo è:
+
+\begin{funcproto}{
+\fhead{signal.h}
+\fdecl{int sigwait(const sigset\_t *set, int *sig)}
+\fdesc{Attende la ricezione di un segnale.} 
+}
+{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{EINTR}] la funzione è stata interrotta.
   \item[\errcode{EINVAL}] si è specificato un valore non valido per
-    \param{set}.
   \end{errlist}
-  ed inoltre \errval{EFAULT}.}
-\end{prototype}
+  ed inoltre \errval{EFAULT} nel suo significato generico.}
+\end{funcproto}
 
-La funzione estrae dall'insieme dei segnali pendenti uno qualunque dei segnali
-specificati da \param{set}, il cui valore viene restituito in \param{sig}.  Se
-sono pendenti più segnali, viene estratto quello a priorità più alta (cioè con
-il numero più basso). Se, nel caso di segnali \textit{real-time}, c'è più di
-un segnale pendente, ne verrà estratto solo uno. Una volta estratto il segnale
-non verrà più consegnato, e se era in una coda il suo posto sarà liberato. Se
-non c'è nessun segnale pendente il processo viene bloccato fintanto che non ne
-arriva uno.
+La funzione estrae dall'insieme dei segnali pendenti uno qualunque fra quelli
+indicati nel \textit{signal set} specificato in \param{set}, il cui valore
+viene restituito nella variabile puntata da \param{sig}.  Se sono pendenti più
+segnali, viene estratto quello a priorità più alta, cioè quello con il numero
+più basso. Se, nel caso di segnali \textit{real-time}, c'è più di un segnale
+pendente, ne verrà estratto solo uno. Una volta estratto il segnale non verrà
+più consegnato, e se era in una coda il suo posto sarà liberato. Se non c'è
+nessun segnale pendente il processo viene bloccato fintanto che non ne arriva
+uno.
 
 Per un funzionamento corretto la funzione richiede che alla sua chiamata i
 segnali di \param{set} siano bloccati. In caso contrario si avrebbe un
@@ -2874,47 +2876,45 @@ comportamento del sistema è indeterminato: il segnale può sia essere
 consegnato che essere ricevuto da \func{sigwait}, il tutto in maniera non
 prevedibile.
 
-Lo standard POSIX.1b definisce altre due funzioni, anch'esse usate
+Lo standard POSIX.1b definisce altre due funzioni di sistema, anch'esse usate
 prevalentemente con i \itindex{thread} \textit{thread}; \funcd{sigwaitinfo} e
 \funcd{sigtimedwait}, i relativi prototipi sono:
-\begin{functions}
-  \headdecl{signal.h}   
 
-  \funcdecl{int sigwaitinfo(const sigset\_t *set, siginfo\_t *info)}  
-  
-  Analoga a \func{sigwait}, ma riceve anche le informazioni associate al
-  segnale in \param{info}.
-  
-  \funcdecl{int sigtimedwait(const sigset\_t *set, siginfo\_t *info, const
-    struct timespec *timeout)}
-  
-  Analoga a \func{sigwaitinfo}, con un la possibilità di specificare un
-  timeout in \param{timeout}.
+\begin{funcproto}{
+\fhead{signal.h}
+\fdecl{int sigwaitinfo(const sigset\_t *set, siginfo\_t *info)}
+\fdesc{Attende un segnale con le relative informazioni.}
+\fdecl{int sigtimedwait(const sigset\_t *set, siginfo\_t *info, const
+  struct timespec *timeout)}
+\fdesc{Attende un segnale con le relative informazioni per un tempo massimo.}
+}
 
-  
-  \bodydesc{Le funzioni restituiscono 0 in caso di successo e $-1$ in caso di
-    errore, nel qual caso \var{errno} assumerà uno dei valori già visti per
-    \func{sigwait}, ai quali si aggiunge, per \func{sigtimedwait}:
+{Le funzioni ritornano $0$ in caso di successo e $-1$ per un errore, nel qual
+  caso \var{errno} assumerà uno gli stessi valori di \func{sigwait} ai quali
+  si aggiunge per \func{sigtimedwait}:
   \begin{errlist}
   \item[\errcode{EAGAIN}] si è superato il timeout senza che un segnale atteso
-    fosse emesso.
+    sia stato ricevuto.
   \end{errlist}
 }
-\end{functions}
+\end{funcproto}
+
 
 Entrambe le funzioni sono estensioni di \func{sigwait}. La prima permette di
 ricevere, oltre al numero del segnale, anche le informazioni ad esso associate
-tramite \param{info}; in particolare viene restituito il numero del segnale
-nel campo \var{si\_signo}, la sua causa in \var{si\_code}, e se il segnale è
-stato immesso sulla coda con \func{sigqueue}, il valore di ritorno ad esso
-associato viene riportato in \var{si\_value}, che altrimenti è indefinito. 
-
-La seconda è identica alla prima ma in più permette di specificare un timeout,
-scaduto il quale ritornerà con un errore. Se si specifica un puntatore nullo
-il comportamento sarà identico a \func{sigwaitinfo}, se si specifica un tempo
-di timeout nullo, e non ci sono segnali pendenti la funzione ritornerà
-immediatamente; in questo modo si può eliminare un segnale dalla coda senza
-dover essere bloccati qualora esso non sia presente.
+tramite l'argomento \param{info}; in particolare viene restituito il numero
+del segnale nel campo \var{si\_signo}, la sua causa in \var{si\_code}, e se il
+segnale è stato immesso sulla coda con \func{sigqueue}, il valore di ritorno
+ad esso associato viene riportato in \var{si\_value}, che altrimenti è
+indefinito.
+
+La seconda è identica alla prima ma in più permette di specificare un timeout
+con l'argomento omonimo, scaduto il quale ritornerà con un errore. Se si
+specifica per \param{timeoout} un puntatore nullo il comportamento sarà
+identico a \func{sigwaitinfo}. Se si specifica un tempo di timeout nullo e non
+ci sono segnali pendenti la funzione ritornerà immediatamente, in questo modo
+si può eliminare un segnale dalla coda senza dover essere bloccati qualora
+esso non sia presente.
 
 \itindbeg{thread} 
 
@@ -2942,29 +2942,28 @@ Sia le funzioni per la gestione dei tempi viste in
 sez.~\ref{sec:sys_cpu_times} che quelle per la gestione dei timer di
 sez.~\ref{sec:sig_alarm_abort} sono state a lungo limitate dalla risoluzione
 massima dei tempi dell'orologio interno del kernel, che era quella ottenibile
-dal timer di sistema che governa lo \textit{scheduler},\footnote{e quindi
-  limitate dalla frequenza dello stesso che si ricordi, come già illustrato in
-  sez.~\ref{sec:proc_hierarchy}, è data dal valore della costante
-  \texttt{HZ}.} i contatori usati per il calcolo dei tempi infatti erano
-basati sul numero di \itindex{jiffies} \textit{jiffies} che vengono
-incrementati ad ogni \textit{clock tick} del timer di sistema.\footnote{il che
-  comportava anche, come accennato in sez.~\ref{sec:sig_alarm_abort} per
-  \func{setitimer}, problemi per il massimo periodo di tempo copribile da
-  alcuni di questi orologi, come quelli associati al \textit{process time}
-  almeno fino a quando, con il kernel 2.6.16, non è stato rimosso il limite di
-  un valore a 32 bit per i \textit{jiffies}.}
+dal timer di sistema che governa lo \textit{scheduler}, e quindi limitate
+dalla frequenza dello stesso che si ricordi, come già illustrato in
+sez.~\ref{sec:proc_hierarchy}, è data dal valore della costante \texttt{HZ}. I
+contatori usati per il calcolo dei tempi infatti erano basati sul numero di
+\itindex{jiffies} \textit{jiffies} che vengono incrementati ad ogni
+\textit{clock tick} del timer di sistema, il che comportava anche, come
+accennato in sez.~\ref{sec:sig_alarm_abort} per \func{setitimer}, problemi per
+il massimo periodo di tempo copribile da alcuni di questi orologi, come quelli
+associati al \textit{process time} almeno fino a quando, con il kernel 2.6.16,
+non è stato rimosso il limite di un valore a 32 bit per i \textit{jiffies}.
 
 Nelle architetture moderne però tutti i computer sono dotati di temporizzatori
 hardware che possono supportare risoluzioni molto elevate, ed in maniera del
 tutto indipendente dalla frequenza scelta per il timer di sistema che governa
-lo \textit{scheduler};\footnote{normalmente si possono ottenere precisioni
-  fino al microsecondo, andando molto oltre in caso di hardware dedicato.} per
-questo lo standard POSIX.1-2001 ha previsto una serie di nuove funzioni
-relative a quelli che vengono chiamati ``\textsl{orologi}
-\textit{real-time}'', in grado di supportare risoluzioni fino al
-nanosecondo. Inoltre le CPU più moderne sono dotate a loro volta di contatori
-ad alta definizione che consentono una grande accuratezza nella misura del
-tempo da esse dedicato all'esecuzione di un processo.
+lo \textit{scheduler}, normalmente si possono ottenere precisioni fino al
+microsecondo, andando molto oltre in caso di hardware dedicato. Per questo lo
+standard POSIX.1-2001 ha previsto una serie di nuove funzioni relative a
+quelli che vengono chiamati ``\textsl{orologi} \textit{real-time}'', in grado
+di supportare risoluzioni fino al nanosecondo. Inoltre le CPU più moderne sono
+dotate a loro volta di contatori ad alta definizione che consentono una grande
+accuratezza nella misura del tempo da esse dedicato all'esecuzione di un
+processo.
 
 Per usare queste funzionalità ed ottenere risoluzioni temporali più accurate,
 occorre però un opportuno supporto da parte del kernel, ed i cosiddetti
@@ -3040,7 +3039,7 @@ tab.~\ref{tab:sig_timer_clockid_types}.
 % funzionamento, vedi http://lwn.net/Articles/429595/
 % TODO: dal 2.6.39 anche CLOCK_BOOTTIME_ALARM e CLOCK_BOOTTIME, vedi
 % http://lwn.net/Articles/429925/
-% TODP: dal 3.0 anche i cosiddetti Posix Alarm Timers, con
+% TODO: dal 3.0 anche i cosiddetti Posix Alarm Timers, con
 % CLOCK_REALTIME_ALARM vedi http://lwn.net/Articles/429925/
 
 Per poter utilizzare queste funzionalità le \acr{glibc} richiedono che la
@@ -3074,12 +3073,12 @@ valore per uno degli orologi \textit{real-time} sono \funcd{clock\_settime} e
   \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
   \begin{errlist}
+  \item[\errcode{EFAULT}] l'indirizzo \param{tp} non è valido.
   \item[\errcode{EINVAL}] il valore specificato per \param{clockid} non è
     valido o il relativo orologio \textit{real-time} non è supportato dal
     sistema.
   \item[\errcode{EPERM}] non si ha il permesso di impostare l'orologio
     indicato (solo per \func{clock\_settime}).
-  \item[\errcode{EFAULT}] l'indirizzo \param{tp} non è valido.
   \end{errlist}
 }
 \end{functions}
@@ -3120,9 +3119,9 @@ orologio, la funzione è \funcd{clock\_getres} ed il suo prototipo è:
   \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
   \begin{errlist}
+  \item[\errcode{EFAULT}] l'indirizzo di \param{res} non è valido.
   \item[\errcode{EINVAL}] il valore specificato per \param{clockid} non è
     valido.
-  \item[\errcode{EFAULT}] l'indirizzo di \param{res} non è valido.
   \end{errlist}
 }
 \end{functions}
@@ -3388,11 +3387,11 @@ identificatore, si può attivare o disattivare un allarme (in gergo
   \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
   \begin{errlist}
+  \item[\errcode{EFAULT}] si è specificato un indirizzo non valido
+    per \param{new\_value} o \param{old\_value}.
   \item[\errcode{EINVAL}] all'interno di \param{new\_value.value} si è
     specificato un tempo negativo o un numero di nanosecondi maggiore di
     999999999.
-  \item[\errcode{EFAULT}] si è specificato un indirizzo non valido
-    per \param{new\_value} o \param{old\_value}.
   \end{errlist}
 }
 \end{functions}
@@ -3510,9 +3509,9 @@ tempo mancante ad una sua eventuale scadenza, si deve utilizzare la funzione
   \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
   \begin{errlist}
-  \item[\errcode{EINVAL}] \param{timerid} non indica un timer valido.
   \item[\errcode{EFAULT}] si è specificato un indirizzo non valido
     per \param{curr\_value}.
+  \item[\errcode{EINVAL}] \param{timerid} non indica un timer valido.
   \end{errlist}
 }
 \end{functions}
@@ -3625,14 +3624,14 @@ Installa un nuovo \textit{stack} per i segnali.
     errore, nel qual caso \var{errno} assumerà i valori:
 
   \begin{errlist}
-  \item[\errcode{ENOMEM}] la dimensione specificata per il nuovo
-    \textit{stack} è minore di \const{MINSIGSTKSZ}.
-  \item[\errcode{EPERM}] uno degli indirizzi non è valido.
   \item[\errcode{EFAULT}] si è cercato di cambiare lo \textit{stack}
     alternativo mentre questo è attivo (cioè il processo è in esecuzione su di
     esso).
   \item[\errcode{EINVAL}] \param{ss} non è nullo e \var{ss\_flags} contiene un
   valore diverso da zero che non è \const{SS\_DISABLE}.
+  \item[\errcode{ENOMEM}] la dimensione specificata per il nuovo
+    \textit{stack} è minore di \const{MINSIGSTKSZ}.
+  \item[\errcode{EPERM}] uno degli indirizzi non è valido.
   \end{errlist}}
 \end{prototype}
 
index bc4d8fbda52ec6cd234896c77d0bfa75738cdad2..00dd60bf2feb1669f5cc03ad3858a14493faeeb7 100644 (file)
@@ -1999,9 +1999,9 @@ prototipo è:
   \begin{errlist}
     \item[\errcode{EACCES}] non si hanno i permessi per accedere a
       \param{pathname}.
+    \item[\errcode{ENOSYS}] il kernel non supporta il \textit{BSD accounting}.
     \item[\errcode{EPERM}] il processo non ha privilegi sufficienti ad
       abilitare il \textit{BSD accounting}.
-    \item[\errcode{ENOSYS}] il kernel non supporta il \textit{BSD accounting}.
     \item[\errcode{EUSERS}] non sono disponibili nel kernel strutture per il
       file o si è finita la memoria.
     \end{errlist}
@@ -2443,9 +2443,9 @@ usare la funzione \funcd{adjtime}, il cui 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}
-  \item[\errcode{EPERM}] il processo non i privilegi di amministratore.
   \item[\errcode{EINVAL}] il valore di \param{delta} eccede il massimo
     consentito.
+  \item[\errcode{EPERM}] il processo non i privilegi di amministratore.
   \end{errlist}
 }  
 \end{funcproto}
@@ -2491,10 +2491,10 @@ regolare anche la velocità e le derive dell'orologio di sistema.  La funzione
   successo e $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei
   valori:
   \begin{errlist}
-  \item[\errcode{EPERM}] si è richiesta una modifica dei parametri ed il
-    processo non ha i privilegi di amministratore.
   \item[\errcode{EINVAL}] si sono indicati valori fuori dall'intervallo
     consentito per qualcuno dei campi di \param{buf}.
+  \item[\errcode{EPERM}] si è richiesta una modifica dei parametri ed il
+    processo non ha i privilegi di amministratore.
   \end{errlist}
   ed inoltre \errval{EFAULT} nel suo significato generico.}
 \end{funcproto}