From 886e1105f5b014b7984a8416d6a8101259af16d6 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sat, 25 Aug 2007 19:15:03 +0000 Subject: [PATCH] Risistemazione dei TODO, nuova sezione sui segnali per gli argomenti avanzati (con placeholder) e uniformate le descrizioni degli errori nei prototipi delle funzioni. --- fileadv.tex | 52 ++++++++++++++++++++++++--------------- filedir.tex | 42 ++++++++++++++++---------------- ipc.tex | 2 +- process.tex | 3 +++ prochand.tex | 2 +- session.tex | 30 +++++++++++++---------- signal.tex | 69 ++++++++++++++++++++++++++++++++++------------------ socket.tex | 14 +++++------ system.tex | 6 ++--- tcpsock.tex | 6 ++--- 10 files changed, 135 insertions(+), 91 deletions(-) diff --git a/fileadv.tex b/fileadv.tex index ce771c9..ef379a6 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -107,10 +107,10 @@ Il primo kernel unix-like ad introdurre una interfaccia per l'\textit{I/O descriptor (anche nullo) che sono attivi, e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno + \item[\errcode{EBADF}] si è specificato un file descriptor sbagliato in uno degli insiemi. - \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale. - \item[\errcode{EINVAL}] Si è specificato per \param{ndfs} un valore negativo + \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale. + \item[\errcode{EINVAL}] si è specificato per \param{ndfs} un valore negativo o un valore non valido per \param{timeout}. \end{errlist} ed inoltre \errval{ENOMEM}. @@ -267,10 +267,10 @@ precedenti, ed inoltre aggiunge a \func{select} una nuova funzione descriptor (anche nullo) che sono attivi, e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno + \item[\errcode{EBADF}] si è specificato un file descriptor sbagliato in uno degli insiemi. - \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale. - \item[\errcode{EINVAL}] Si è specificato per \param{ndfs} un valore negativo + \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale. + \item[\errcode{EINVAL}] si è specificato per \param{ndfs} un valore negativo o un valore non valido per \param{timeout}. \end{errlist} ed inoltre \errval{ENOMEM}.} @@ -350,10 +350,10 @@ cui prototipo in caso di successo, o 0 se c'è stato un timeout e -1 in caso di errore, ed in quest'ultimo caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno + \item[\errcode{EBADF}] si è specificato un file descriptor sbagliato in uno degli insiemi. - \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale. - \item[\errcode{EINVAL}] Il valore di \param{nfds} eccede il limite + \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale. + \item[\errcode{EINVAL}] il valore di \param{nfds} eccede il limite \macro{RLIMIT\_NOFILE}. \end{errlist} ed inoltre \errval{EFAULT} e \errval{ENOMEM}.} @@ -496,10 +496,10 @@ prototipo in caso di successo, o 0 se c'è stato un timeout e -1 in caso di errore, ed in quest'ultimo caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno + \item[\errcode{EBADF}] si è specificato un file descriptor sbagliato in uno degli insiemi. - \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale. - \item[\errcode{EINVAL}] Il valore di \param{nfds} eccede il limite + \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale. + \item[\errcode{EINVAL}] il valore di \param{nfds} eccede il limite \macro{RLIMIT\_NOFILE}. \end{errlist} ed inoltre \errval{EFAULT} e \errval{ENOMEM}.} @@ -741,7 +741,7 @@ si usa come valore lo stesso \param{fd}. (analogo di \const{POLLIN}).\\ \const{EPOLLOUT} & Il file è pronto per le operazioni di scrittura (analogo di \const{POLLOUT}).\\ - \const{EPOLLRDHUP} & l'altro capo di un socket di tipo + \const{EPOLLRDHUP} & L'altro capo di un socket di tipo \const{SOCK\_STREAM} (vedi sez.~\ref{sec:sock_type}) ha chiuso la connessione o il capo in scrittura della stessa (vedi sez.~\ref{sec:TCP_shutdown}).\\ @@ -1248,7 +1248,7 @@ viene segnalata, ma poi (operazione che può essere molto onerosa quando una directory contiene un gran numero di file). Infine l'uso dei segnali come interfaccia di notifica comporta tutti i problemi di gestione visti in sez.~\ref{sec:sig_management} e -sez.~\ref{sec:sig_control}. Per tutta questa serie di motivi in generale +sez.~\ref{sec:sig_adv_control}. Per tutta questa serie di motivi in generale quella di \textit{dnotify} viene considerata una interfaccia di usabilità problematica. @@ -1734,11 +1734,6 @@ raggruppati in un solo evento. \index{file!inotify|)} -% TODO inserire anche eventfd (vedi http://lwn.net/Articles/233462/) -% e le restanti signalfd e timerfd introdotte con il 2.6.22 -% o trovargli un posto migliore - - \subsection{L'interfaccia POSIX per l'I/O asincrono} \label{sec:file_asyncronous_io} @@ -3367,6 +3362,25 @@ questa sezione una serie funzioni che consentono ai programmi di ottimizzare il loro accesso ai dati dei file e controllare la gestione del relativo \textit{caching}. +Una prima funzione che può essere utilizzata per modificare la gestione +ordinaria dell'I/O su file è \funcd{readahead}, che consente di richiedere la +lettura del contenuto di un file sulla cache, così che le seguenti operazioni +di lettura non debbano bloccarsi nell'I/O su disco, il suo prototipo è: +\begin{functions} + \headdecl{fcntl.h} + + \funcdecl{ssize_t readahead(int fd, off64_t *offset, size_t count)} + + Legge il contenuto di un file nella cache di memoria. + + \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di + errore, nel qual caso \var{errno} assumerà uno dei valori: + \begin{errlist} + \item[\errcode{EBADF}] . + \item[\errcode{EINVAL}] . + \end{errlist} + } +\end{functions} % TODO documentare \func{posix\_fadvise} diff --git a/filedir.tex b/filedir.tex index 1415649..48c04ae 100644 --- a/filedir.tex +++ b/filedir.tex @@ -79,8 +79,8 @@ suole chiamare questo tipo di associazione un collegamento diretto (o \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di errore nel qual caso \var{errno} viene impostata ai valori: \begin{errlist} - \item[\errcode{EXDEV}] \param{oldpath} e \param{newpath} non sono sullo - stesso filesystem. + \item[\errcode{EXDEV}] i file \param{oldpath} e \param{newpath} non sono + sullo stesso filesystem. \item[\errcode{EPERM}] il filesystem che contiene \param{oldpath} e \param{newpath} non supporta i link diretti o è una directory. \item[\errcode{EEXIST}] un file (o una directory) con quel nome esiste di @@ -256,7 +256,7 @@ nello stesso filesystem) si usa invece la funzione \funcd{rename},\footnote{la \item[\errcode{EINVAL}] \param{newpath} contiene un prefisso di \param{oldpath} o più in generale si è cercato di creare una directory come sotto-directory di se stessa. - \item[\errcode{ENOTDIR}] Uno dei componenti dei \itindex{pathname} + \item[\errcode{ENOTDIR}] uno dei componenti dei \itindex{pathname} \textit{pathname} non è una directory o \param{oldpath} è una directory e \param{newpath} esiste e non è una directory. \end{errlist} @@ -540,17 +540,17 @@ La funzione che permette la cancellazione di una directory \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[\errcode{EPERM}] Il filesystem non supporta la cancellazione di + \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 l'user-ID effettivo del processo non corrisponde al proprietario della directory. - \item[\errcode{EACCES}] Non c'è il permesso di scrittura per la directory + \item[\errcode{EACCES}] 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 \param{dirname}. - \item[\errcode{EBUSY}] La directory specificata è la directory di lavoro o la + \item[\errcode{EBUSY}] la directory specificata è la directory di lavoro o la radice di qualche processo. - \item[\errcode{ENOTEMPTY}] La directory non è vuota. + \item[\errcode{ENOTEMPTY}] la directory non è vuota. \end{errlist} ed inoltre anche \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, \errval{EROFS}.} @@ -595,10 +595,10 @@ di queste funzioni \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[\errcode{EPERM}] Non si hanno privilegi sufficienti a creare l'inode, o + \item[\errcode{EPERM}] non si hanno privilegi sufficienti a creare l'inode, o il filesystem su cui si è cercato di creare \param{pathname} non supporta l'operazione. - \item[\errcode{EINVAL}] Il valore di \param{mode} non indica un file, una + \item[\errcode{EINVAL}] il valore di \param{mode} non indica un file, una fifo o un dispositivo. \item[\errcode{EEXIST}] \param{pathname} esiste già o è un link simbolico. \end{errlist} @@ -1083,11 +1083,11 @@ prototipo \val{NULL} se fallisce, in quest'ultimo caso la variabile \var{errno} è impostata con i seguenti codici di errore: \begin{errlist} - \item[\errcode{EINVAL}] L'argomento \param{size} è zero e \param{buffer} non + \item[\errcode{EINVAL}] l'argomento \param{size} è zero e \param{buffer} non è nullo. - \item[\errcode{ERANGE}] L'argomento \param{size} è più piccolo della + \item[\errcode{ERANGE}] l'argomento \param{size} è più piccolo della lunghezza del \textit{pathname}. - \item[\errcode{EACCES}] Manca il permesso di lettura o di ricerca su uno dei + \item[\errcode{EACCES}] manca il permesso di lettura o di ricerca su uno dei componenti del \textit{pathname} (cioè su una delle directory superiori alla corrente). \end{errlist}} @@ -1134,8 +1134,8 @@ Per cambiare la directory di lavoro si pu \bodydesc{La funzione restituisce 0 in caso di successo e -1 per un errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\errcode{ENOTDIR}] Non si è specificata una directory. - \item[\errcode{EACCES}] Manca il permesso di ricerca su uno dei componenti + \item[\errcode{ENOTDIR}] non si è specificata una directory. + \item[\errcode{EACCES}] manca il permesso di ricerca su uno dei componenti di \param{path}. \end{errlist} ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT}, @@ -1241,8 +1241,8 @@ POSIX definisce la funzione \funcd{tmpfile}, il cui prototipo temporaneo in caso di successo e \val{NULL} in caso di errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale. - \item[\errcode{EEXIST}] Non è stato possibile generare un nome univoco. + \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale. + \item[\errcode{EEXIST}] non è stato possibile generare un nome univoco. \end{errlist} ed inoltre \errval{EFAULT}, \errval{EMFILE}, \errval{ENFILE}, \errval{ENOSPC}, \errval{EROFS} e \errval{EACCES}.} @@ -1557,7 +1557,7 @@ dimensione si possono usare le due funzioni \funcd{truncate} e \item[\errcode{EACCES}] il file non ha permesso di scrittura o non si ha il permesso di esecuzione una delle directory del \itindex{pathname} \textit{pathname}. - \item[\errcode{ETXTBSY}] Il file è un programma in esecuzione. + \item[\errcode{ETXTBSY}] il file è un programma in esecuzione. \end{errlist} ed anche \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{EROFS}, \errval{EIO}, \errval{EFAULT}, \errval{ELOOP}.} @@ -2191,9 +2191,9 @@ filename e su un file descriptor, i loro prototipi sono: \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[\errcode{EPERM}] L'user-ID effettivo non corrisponde a quello del + \item[\errcode{EPERM}] l'user-ID effettivo non corrisponde a quello del proprietario del file o non è zero. - \item[\errcode{EROFS}] Il file è su un filesystem in sola lettura. + \item[\errcode{EROFS}] il file è su un filesystem in sola lettura. \end{errlist} ed inoltre \errval{EIO}; \func{chmod} restituisce anche \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM}, \errval{ENOTDIR}, @@ -2384,7 +2384,7 @@ sono: \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[\errcode{EPERM}] L'user-ID effettivo non corrisponde a quello del + \item[\errcode{EPERM}] l'user-ID effettivo 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 \errval{EROFS} e @@ -2668,7 +2668,7 @@ prototipo \bodydesc{La funzione restituisce zero in caso di successo e -1 per un errore, in caso di errore \var{errno} può assumere i valori: \begin{errlist} - \item[\errcode{EPERM}] L'user-ID effettivo del processo non è zero. + \item[\errcode{EPERM}] l'user-ID effettivo del processo non è zero. \end{errlist} ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM}, \errval{ENOTDIR}, \errval{EACCES}, \errval{ELOOP}; diff --git a/ipc.tex b/ipc.tex index 0b4bd7a..384a2d3 100644 --- a/ipc.tex +++ b/ipc.tex @@ -2476,7 +2476,7 @@ un segmento di memoria condivisa \begin{errlist} \item[\errcode{EACCES}] si è richiesto \const{IPC\_STAT} ma i permessi non consentono l'accesso in lettura al segmento. - \item[\errcode{EINVAL}] O \param{shmid} non è un identificatore valido o + \item[\errcode{EINVAL}] o \param{shmid} non è un identificatore valido o \param{cmd} non è un comando valido. \item[\errcode{EIDRM}] l'argomento \param{shmid} fa riferimento ad un segmento che è stato cancellato. diff --git a/process.tex b/process.tex index b025b2b..b5cfe14 100644 --- a/process.tex +++ b/process.tex @@ -926,8 +926,11 @@ ci si scrive sopra. % \subsection{Gestione avanzata dell'allocazione della memoria} % \label{sec:proc_mem_malloc_custom} + % TODO: trattare le funzionalità avanzate di \func{malloc} % TODO: trattare \func{memalign} +% TODO: trattare \func{valloc} +% TODO: trattare \func{posix\_memalign} diff --git a/prochand.tex b/prochand.tex index 9717529..03ed95f 100644 --- a/prochand.tex +++ b/prochand.tex @@ -3545,7 +3545,7 @@ qualunque momento, e le operazioni di un eventuale \textit{signal handler} sono compiute nello stesso spazio di indirizzi del processo. Per questo, anche il solo accesso o l'assegnazione di una variabile possono non essere più operazioni atomiche (torneremo su questi aspetti in -sez.~\ref{sec:sig_control}). +sez.~\ref{sec:sig_adv_control}). In questo caso il sistema provvede un tipo di dato, il \type{sig\_atomic\_t}, il cui accesso è assicurato essere atomico. In pratica comunque si può diff --git a/session.tex b/session.tex index b254579..5c62d91 100644 --- a/session.tex +++ b/session.tex @@ -167,8 +167,8 @@ funzione \funcd{getsid}, che per caso di successo, e -1 in caso di errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\errcode{ESRCH}] Il processo selezionato non esiste. - \item[\errcode{EPERM}] In alcune implementazioni viene restituito quando il + \item[\errcode{ESRCH}] il processo selezionato non esiste. + \item[\errcode{EPERM}] in alcune implementazioni viene restituito quando il processo selezionato non fa parte della stessa sessione del processo corrente. \end{errlist} @@ -211,10 +211,10 @@ ad un altro con la funzione \funcd{setpgid}, il cui prototipo \bodydesc{La funzione ritorna il valore del nuovo \textit{process group}, e -1 in caso di errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\errcode{ESRCH}] Il processo selezionato non esiste. - \item[\errcode{EPERM}] Il cambiamento non è consentito. - \item[\errcode{EACCES}] Il processo ha già eseguito una \func{exec}. - \item[\errcode{EINVAL}] Il valore di \param{pgid} è negativo. + \item[\errcode{ESRCH}] il processo selezionato non esiste. + \item[\errcode{EPERM}] il cambiamento non è consentito. + \item[\errcode{EACCES}] il processo ha già eseguito una \func{exec}. + \item[\errcode{EINVAL}] il valore di \param{pgid} è negativo. \end{errlist} } \end{prototype} @@ -338,10 +338,10 @@ funzione \funcd{tcsetpgrp}, il cui prototipo \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\errcode{ENOTTY}] Il file \param{fd} non corrisponde al terminale di + \item[\errcode{ENOTTY}] il file \param{fd} non corrisponde al terminale di controllo del processo chiamante. - \item[\errcode{ENOSYS}] Il sistema non supporta il job control. - \item[\errcode{EPERM}] Il \textit{process group} specificato non è nella + \item[\errcode{ENOSYS}] il sistema non supporta il job control. + \item[\errcode{EPERM}] il \textit{process group} specificato non è nella stessa sessione del processo chiamante. \end{errlist} ed inoltre \errval{EBADF} ed \errval{EINVAL}. @@ -376,7 +376,7 @@ ad un terminale con la funzione \funcd{tcgetpgrp}, il cui prototipo gruppo di \textit{foreground}, e -1 in caso di errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\errcode{ENOTTY}] Non c'è un terminale di controllo o \param{fd} non + \item[\errcode{ENOTTY}] non c'è un terminale di controllo o \param{fd} non corrisponde al terminale di controllo del processo chiamante. \end{errlist} ed inoltre \errval{EBADF} ed \errval{ENOSYS}. @@ -1583,7 +1583,7 @@ immagazzinate le impostazioni. Le funzioni sono \funcd{tcgetattr} e \bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in caso di errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\errcode{EINTR}] La funzione è stata interrotta. + \item[\errcode{EINTR}] la funzione è stata interrotta. \end{errlist} ed inoltre \errval{EBADF}, \errval{ENOTTY} ed \errval{EINVAL}. } @@ -1991,14 +1991,18 @@ Da fare. \label{sec:sess_pty} Qui vanno spiegati i terminali virtuali, \file{/dev/pty} e compagnia. +% vedi man pts -\subsection{La funzione \func{openpty}} + +\subsection{Allocazione dei terminale virtuali} \label{sec:sess_openpty} Qui vanno le cose su \func{openpty} e compagnia. - % TODO le ioctl dei terminali +% TODO trattare \func{posix\_openpt} + + % LocalWords: kernel multitasking dell'I job control BSD POSIX shell sez group diff --git a/signal.tex b/signal.tex index e86d9d2..669936e 100644 --- a/signal.tex +++ b/signal.tex @@ -761,7 +761,7 @@ indicizzate per numero di segnale, per cui una chiamata del tipo di \code{char -\section{La gestione dei segnali} +\section{La gestione di base dei segnali} \label{sec:sig_management} I segnali sono il primo e più classico esempio di eventi asincroni, cioè di @@ -997,9 +997,9 @@ prototipo \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di errore nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EINVAL}] Il segnale specificato non esiste. - \item[\errcode{ESRCH}] Il processo selezionato non esiste. - \item[\errcode{EPERM}] Non si hanno privilegi sufficienti ad inviare il + \item[\errcode{EINVAL}] il segnale specificato non esiste. + \item[\errcode{ESRCH}] il processo selezionato non esiste. + \item[\errcode{EPERM}] non si hanno privilegi sufficienti ad inviare il segnale. \end{errlist}} \end{functions} @@ -1472,8 +1472,8 @@ tutti gli stati di terminazione sono stati ricevuti. -\section{Gestione avanzata} -\label{sec:sig_control} +\section{La gestione avanzata dei segnali} +\label{sec:sig_adv_control} Le funzioni esaminate finora fanno riferimento alle modalità più elementari della gestione dei segnali; non si sono pertanto ancora prese in @@ -1686,10 +1686,10 @@ da un processo. Il suo prototipo \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[\errcode{EINVAL}] Si è specificato un numero di segnale invalido o si è + \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido o si è cercato di installare il gestore per \const{SIGKILL} o \const{SIGSTOP}. - \item[\errcode{EFAULT}] Si sono specificati indirizzi non validi. + \item[\errcode{EFAULT}] si sono specificati indirizzi non validi. \end{errlist}} \end{prototype} @@ -1939,8 +1939,8 @@ pi \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[\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. + \item[\errcode{EFAULT}] si sono specificati indirizzi non validi. \end{errlist}} \end{prototype} @@ -2002,8 +2002,8 @@ sospensione del processo lo standard POSIX ha previsto la funzione \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[\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. + \item[\errcode{EFAULT}] si sono specificati indirizzi non validi. \end{errlist}} \end{prototype} @@ -2132,10 +2132,10 @@ Installa un nuovo stack per i segnali. errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\errcode{ENOMEM}] La dimensione specificata per il nuovo stack è minore + \item[\errcode{ENOMEM}] la dimensione specificata per il nuovo stack è minore di \const{MINSIGSTKSZ}. - \item[\errcode{EPERM}] Uno degli indirizzi non è valido. - \item[\errcode{EFAULT}] Si è cercato di cambiare lo stack alternativo mentre + \item[\errcode{EPERM}] uno degli indirizzi non è valido. + \item[\errcode{EFAULT}] si è cercato di cambiare lo 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}. @@ -2314,6 +2314,16 @@ accorgimenti visti in precedenza) il valore di questa variabile tutte le volte che si è rilevata una interruzione dovuta ad un segnale. +\section{Funzionalità avanzate} +\label{sec:sig_real_time} + + +Tratteremo in questa ultima sezione alcune funzionalità avanzate relativa ai +segnali ed in generale ai meccanismi di notifica, a partire dalla funzioni +introdotte per la gestione dei cosiddetti ``\textsl{segnali real-time}'', alla +gestione avanzata delle temporizzazioni e le nuove interfacce per la gestione +di segnali ed eventi attraverso l'uso di filedescriptor. + \subsection{I segnali real-time} \label{sec:sig_real_time} @@ -2428,12 +2438,12 @@ funzione, \funcd{sigqueue}, il cui prototipo \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EAGAIN}] La coda è esaurita, ci sono già \const{SIGQUEUE\_MAX} - segnali in attesa si consegna. - \item[\errcode{EPERM}] Non si hanno privilegi appropriati per inviare il + \item[\errcode{EAGAIN}] la coda è esaurita, ci sono già + \const{SIGQUEUE\_MAX} segnali in attesa si consegna. + \item[\errcode{EPERM}] non si hanno privilegi appropriati per inviare il segnale al processo specificato. - \item[\errcode{ESRCH}] Il processo \param{pid} non esiste. - \item[\errcode{EINVAL}] Si è specificato un valore non valido per + \item[\errcode{ESRCH}] il processo \param{pid} non esiste. + \item[\errcode{EINVAL}] si è specificato un valore non valido per \param{signo}. \end{errlist} ed inoltre \errval{ENOMEM}.} @@ -2473,8 +2483,8 @@ meccanismi di comunicazione elementare; la prima di queste funzioni \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di 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 + \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}.} @@ -2519,7 +2529,7 @@ relativi prototipi sono: errore, nel qual caso \var{errno} assumerà uno dei valori già visti per \func{sigwait}, ai quali si aggiunge, per \func{sigtimedwait}: \begin{errlist} - \item[\errcode{EAGAIN}] Si è superato il timeout senza che un segnale atteso + \item[\errcode{EAGAIN}] si è superato il timeout senza che un segnale atteso fosse emesso. \end{errlist} } @@ -2550,6 +2560,19 @@ questa maniera devono essere mascherati per tutti i thread, compreso quello dedicato alla gestione, che potrebbe riceverlo fra due chiamate successive. +\subsection{La gestione avanzata delle temporizzazioni} +\label{sec:sig_timer_adv} + + + + +\subsection{Le interfacce per la notifica attraverso i file descriptor} +\label{sec:sig_signalfd_eventfd} + + +% TODO trattare qui eventfd signalfd e timerfd introdotte con il 2.6.22 +% vedi: http://lwn.net/Articles/233462/ +% http://lwn.net/Articles/245533/ % LocalWords: kernel POSIX timer shell control ctrl kill raise signal handler diff --git a/socket.tex b/socket.tex index a1e2e61..d1298c3 100644 --- a/socket.tex +++ b/socket.tex @@ -126,15 +126,15 @@ il suo prototipo -1 in caso di fallimento, nel qual caso la variabile \var{errno} assumerà i valori: \begin{errlist} - \item[\errcode{EPROTONOSUPPORT}] Il tipo di socket o il protocollo scelto non - sono supportati nel dominio. - \item[\errcode{ENFILE}] Il kernel non ha memoria sufficiente a creare una + \item[\errcode{EPROTONOSUPPORT}] il tipo di socket o il protocollo scelto + non sono supportati nel dominio. + \item[\errcode{ENFILE}] il kernel non ha memoria sufficiente a creare una nuova struttura per il socket. - \item[\errcode{EMFILE}] Si è ecceduta la tabella dei file. - \item[\errcode{EACCES}] Non si hanno privilegi per creare un socket nel + \item[\errcode{EMFILE}] si è ecceduta la tabella dei file. + \item[\errcode{EACCES}] non si hanno privilegi per creare un socket nel dominio o con il protocollo specificato. - \item[\errcode{EINVAL}] Protocollo sconosciuto o dominio non disponibile. - \item[\errcode{ENOBUFS}] Non c'è sufficiente memoria per creare il socket + \item[\errcode{EINVAL}] protocollo sconosciuto o dominio non disponibile. + \item[\errcode{ENOBUFS}] non c'è sufficiente memoria per creare il socket (può essere anche \errval{ENOMEM}). \end{errlist} inoltre, a seconda del protocollo usato, potranno essere generati altri diff --git a/system.tex b/system.tex index ddd77b8..6d74ced 100644 --- a/system.tex +++ b/system.tex @@ -1588,8 +1588,8 @@ parte di un processo sono previste due funzioni, \funcd{getrlimit} e \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EINVAL}] I valori per \param{resource} non sono validi. - \item[\errcode{EPERM}] Un processo senza i privilegi di amministratore ha + \item[\errcode{EINVAL}] i valori per \param{resource} non sono validi. + \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha cercato di innalzare i propri limiti. \end{errlist} ed \errval{EFAULT}.} @@ -1747,7 +1747,7 @@ prototipo \begin{errlist} \item[\errcode{EACCESS}] non si hanno i permessi per accedere a \param{pathname}. - \item[\errcode{EPERM}] Il processo non ha privilegi sufficienti ad + \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{EUSER}] non sono disponibili nel kernel strutture per il diff --git a/tcpsock.tex b/tcpsock.tex index 724b402..2b460be 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -684,7 +684,7 @@ ci si porr \item[\errcode{ENOTSOCK}] il file descriptor non è associato ad un socket. \item[\errcode{EACCES}] si è cercato di usare una porta riservata senza sufficienti privilegi. - \item[\errcode{EADDRNOTAVAIL}] Il tipo di indirizzo specificato non è + \item[\errcode{EADDRNOTAVAIL}] il tipo di indirizzo specificato non è disponibile. \item[\errcode{EADDRINUSE}] qualche altro socket sta già usando l'indirizzo. \end{errlist} @@ -1044,11 +1044,11 @@ funzione \item[\errcode{EAGAIN} o \errcode{EWOULDBLOCK}] il socket è stato impostato come non bloccante (vedi sez.~\ref{sec:file_noblocking}), e non ci sono connessioni in attesa di essere accettate. - \item[\errcode{EPERM}] Le regole del firewall non consentono la connessione. + \item[\errcode{EPERM}] le regole del firewall non consentono la connessione. \item[\errcode{ENOBUFS}, \errcode{ENOMEM}] questo spesso significa che l'allocazione della memoria è limitata dai limiti sui buffer dei socket, non dalla memoria di sistema. - \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale. + \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale. \end{errlist} Inoltre possono essere restituiti gli errori di rete relativi al nuovo socket, diversi a secondo del protocollo, come: \errval{EMFILE}, -- 2.30.2