From: Simone Piccardi Date: Sat, 19 May 2012 20:00:19 +0000 (+0000) Subject: Ordinamento alfabetico degli errori ed un po' di revisione X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=a801b1a1804866073aad5c25a84893a697a3b3b3;p=gapil.git Ordinamento alfabetico degli errori ed un po' di revisione --- diff --git a/filedir.tex b/filedir.tex index 79e5823..2891b77 100644 --- a/filedir.tex +++ b/filedir.tex @@ -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} diff --git a/fileio.tex b/fileio.tex index 883e829..74193f4 100644 --- a/fileio.tex +++ b/fileio.tex @@ -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} diff --git a/signal.tex b/signal.tex index c755b31..7af26cf 100644 --- a/signal.tex +++ b/signal.tex @@ -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} diff --git a/system.tex b/system.tex index bc4d8fb..00dd60b 100644 --- a/system.tex +++ b/system.tex @@ -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}