From 0533192662934e0137c96f09c11ecc8d08a9131a Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Wed, 27 Apr 2005 22:50:16 +0000 Subject: [PATCH] Revisione degli indici con numerose correzioni di riferimenti sbagliati, errori di battitura e mancate definizioni. --- fileadv.tex | 25 +++++++++++++------------ filedir.tex | 18 +++++++++--------- fileunix.tex | 4 ++-- ipc.tex | 41 +++++++++++++++++++++-------------------- prochand.tex | 2 +- session.tex | 4 ++-- signal.tex | 8 ++++---- sockctrl.tex | 19 ++++++++++--------- sources/SockUtil.c | 4 ++-- 9 files changed, 64 insertions(+), 61 deletions(-) diff --git a/fileadv.tex b/fileadv.tex index f4acfef..c91f34e 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -420,8 +420,8 @@ distinzione ha senso solo per i dati \textit{out-of-band} dei socket (vedi sez.~\ref{sec:TCP_urgent_data}), ma su questo e su come \func{poll} reagisce alle varie condizioni dei socket torneremo in sez.~\ref{sec:TCP_serv_poll}, dove vedremo anche un esempio del suo utilizzo. Si tenga conto comunque che le -costanti relative ai diversi tipi di dati (come \macro{POLLRDNORM} e -\macro{POLLRDBAND}) sono utilizzabili soltanto qualora si sia definita la +costanti relative ai diversi tipi di dati (come \const{POLLRDNORM} e +\const{POLLRDBAND}) sono utilizzabili soltanto qualora si sia definita la macro \macro{\_XOPEN\_SOURCE}.\footnote{e ci si ricordi di farlo sempre in testa al file, definirla soltanto prima di includere \file{sys/poll.h} non è sufficiente.} @@ -1127,7 +1127,7 @@ tab.~\ref{tab:file_mmap_flag}. visibili agli altri processi che mappano lo stesso file.\footnotemark Il file su disco però non sarà aggiornato fino alla chiamata di \func{msync} o - \func{unmap}), e solo allora le modifiche saranno + \func{munmap}), e solo allora le modifiche saranno visibili per l'I/O convenzionale. Incompatibile con \const{MAP\_PRIVATE}. \\ \const{MAP\_PRIVATE} & I cambiamenti sulla memoria mappata non vengono @@ -1547,14 +1547,14 @@ anche se richiesto attraverso un file descriptor, agisce sempre su un file; perciò le informazioni relative agli eventuali \textit{file lock} sono mantenute a livello di inode\index{inode},\footnote{in particolare, come accennato in fig.~\ref{fig:file_flock_struct}, i \textit{file lock} sono - mantenuti un una \textit{linked list}\index{linked list} di strutture - \struct{file\_lock}. La lista è referenziata dall'indirizzo di partenza - mantenuto dal campo \var{i\_flock} della struttura \struct{inode} (per le - definizioni esatte si faccia riferimento al file \file{fs.h} nei sorgenti - del kernel). Un bit del campo \var{fl\_flags} di specifica se si tratta di - un lock in semantica BSD (\const{FL\_FLOCK}) o POSIX (\const{FL\_POSIX}).} -dato che questo è l'unico riferimento in comune che possono avere due processi -diversi che aprono lo stesso file. + mantenuti un una \textit{linked~list}\index{\textit{linked list}} di + strutture \struct{file\_lock}. La lista è referenziata dall'indirizzo di + partenza mantenuto dal campo \var{i\_flock} della struttura \struct{inode} + (per le definizioni esatte si faccia riferimento al file \file{fs.h} nei + sorgenti del kernel). Un bit del campo \var{fl\_flags} di specifica se si + tratta di un lock in semantica BSD (\const{FL\_FLOCK}) o POSIX + (\const{FL\_POSIX}).} dato che questo è l'unico riferimento in comune che +possono avere due processi diversi che aprono lo stesso file. \begin{figure}[htb] \centering @@ -1801,7 +1801,8 @@ questo caso la titolarit voce nella file table, ma con il valore del \acr{pid} del processo. Quando si richiede un lock il kernel effettua una scansione di tutti i lock -presenti sul file\footnote{scandisce cioè la linked list delle strutture +presenti sul file\footnote{scandisce cioè la + \index{\textit{linked~list}}\textit{linked list} delle strutture \struct{file\_lock}, scartando automaticamente quelle per cui \var{fl\_flags} non è \const{FL\_POSIX}, così che le due interfacce restano ben separate.} per verificare se la regione richiesta non si sovrappone ad diff --git a/filedir.tex b/filedir.tex index ff2d330..8618693 100644 --- a/filedir.tex +++ b/filedir.tex @@ -586,7 +586,7 @@ di queste funzioni \begin{functions} \headdecl{sys/types.h} \headdecl{sys/stat.h} - \headdecl{fnctl.h} + \headdecl{fcntl.h} \headdecl{unistd.h} \funcdecl{int mknod(const char *pathname, mode\_t mode, dev\_t dev)} @@ -596,7 +596,7 @@ di queste funzioni errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} \item[\errcode{EPERM}] Non si hanno privilegi sufficienti a creare l'inode, o - il filesystem su cui si è cercato di creare \func{pathname} non supporta + 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 fifo o un dispositivo. @@ -846,7 +846,7 @@ Il campo \var{d\_off} contiene invece la posizione della voce successiva della directory, mentre il campo \var{d\_reclen} la lunghezza totale della voce letta. Con questi due campi diventa possibile, determinando la posizione delle varie voci, spostarsi all'interno dello stream usando la funzione -\func{seekdir},\footnote{sia questa funzione che \func{telldir}, sono +\funcd{seekdir},\footnote{sia questa funzione che \func{telldir}, sono estensioni prese da BSD, non previste dallo standard POSIX.} il cui prototipo è: \begin{prototype}{dirent.h}{void seekdir(DIR *dir, off\_t offset)} @@ -856,7 +856,7 @@ prototipo La funzione non ritorna nulla e non segnala errori, è però necessario che il valore dell'argomento \param{offset} sia valido per lo stream \param{dir}; esso pertanto deve essere stato ottenuto o dal valore di \var{d\_off} di -\struct{dirent} o dal valore restituito dalla funzione \func{telldir}, che +\struct{dirent} o dal valore restituito dalla funzione \funcd{telldir}, che legge la posizione corrente; il prototipo di quest'ultima è: \begin{prototype}{dirent.h}{off\_t telldir(DIR *dir)} Ritorna la posizione corrente in un \textit{directory stream}. @@ -948,8 +948,8 @@ delle varie voci). Le \acr{glibc} prevedono come estensione\footnote{le glibc, a partire dalla versione 2.1, effettuano anche l'ordinamento alfabetico tenendo conto delle varie localizzazioni, usando \func{strcoll} al posto di \func{strcmp}.} anche \func{versionsort}, che ordina i nomi tenendo conto -del numero di versione (cioè qualcosa per cui \file{file10} viene comunque -dopo \func{file4}.) +del numero di versione (cioè qualcosa per cui \texttt{file10} viene comunque +dopo \texttt{file4}.) Un semplice esempio dell'uso di queste funzioni è riportato in fig.~\ref{fig:file_my_ls}, dove si è riportata la sezione principale di un @@ -1219,7 +1219,7 @@ queste funzioni occorre sempre aprire il nuovo file in modalit esistente. Per evitare di dovere effettuare a mano tutti questi controlli, lo standard -POSIX definisce la funzione \funcd{tempfile}, il cui prototipo è: +POSIX definisce la funzione \funcd{tmpfile}, il cui prototipo è: \begin{prototype}{stdio.h}{FILE *tmpfile (void)} Restituisce un file temporaneo aperto in lettura/scrittura. @@ -1724,7 +1724,7 @@ di \param{times}. Se questa \end{prototype} La funzione prende come argomento \param{times} una struttura -\struct{utimebuf}, la cui definizione è riportata in +\struct{utimbuf}, la cui definizione è riportata in fig.~\ref{fig:struct_utimebuf}, con la quale si possono specificare i nuovi valori che si vogliono impostare per tempi. @@ -1817,7 +1817,7 @@ rispettivamente al proprietario, al gruppo, a tutti gli altri. \centering \includegraphics[width=6cm]{img/fileperm} \caption{Lo schema dei bit utilizzati per specificare i permessi di un file - contenuti nel campo \var{st\_mode} di \struct{fstat}.} + contenuti nel campo \var{st\_mode} di \struct{stat}.} \label{fig:file_perm_bit} \end{figure} diff --git a/fileunix.tex b/fileunix.tex index bfac2a5..4d91e52 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -1027,9 +1027,9 @@ sar allo stesso valore per il file descriptor). La duplicazione dei file descriptor può essere effettuata anche usando la -funzione di controllo dei file \func{fnctl} (che esamineremo in +funzione di controllo dei file \func{fcntl} (che esamineremo in sez.~\ref{sec:file_fcntl}) con il parametro \const{F\_DUPFD}. L'operazione ha -la sintassi \code{fnctl(oldfd, F\_DUPFD, newfd)} e se si usa 0 come valore per +la sintassi \code{fcntl(oldfd, F\_DUPFD, newfd)} e se si usa 0 come valore per \param{newfd} diventa equivalente a \func{dup}. La sola differenza fra le due funzioni\footnote{a parte la sintassi ed i diff --git a/ipc.tex b/ipc.tex index 1de5b87..e6b45de 100644 --- a/ipc.tex +++ b/ipc.tex @@ -1186,22 +1186,23 @@ file \file{msgmax}, \file{msgmnb} e \file{msgmni} di \file{/proc/sys/kernel/}. \end{figure} -Una coda di messaggi è costituita da una \textit{linked list};\footnote{una - \textit{linked list} è una tipica struttura di dati, organizzati in una - lista in cui ciascun elemento contiene un puntatore al successivo. In questo - modo la struttura è veloce nell'estrazione ed immissione dei dati dalle - estremità dalla lista (basta aggiungere un elemento in testa o in coda ed - aggiornare un puntatore), e relativamente veloce da attraversare in ordine - sequenziale (seguendo i puntatori), è invece relativamente lenta - nell'accesso casuale e nella ricerca.} i nuovi messaggi vengono inseriti in -coda alla lista e vengono letti dalla cima, in fig.~\ref{fig:ipc_mq_schema} si -è riportato lo schema con cui queste strutture vengono mantenute dal -kernel.\footnote{lo schema illustrato in fig.~\ref{fig:ipc_mq_schema} è in - realtà una semplificazione di quello usato effettivamente fino ai kernel - della serie 2.2.x, nei kernel della serie 2.4.x la gestione delle code di - messaggi è stata modificata ed è effettuata in maniera diversa; abbiamo - mantenuto lo schema precedente in quanto illustra comunque in maniera più - che adeguata i principi di funzionamento delle code di messaggi.} +Una coda di messaggi è costituita da una +\index{\textit{linked~list}}\textit{linked list};\footnote{una \textit{linked + list} è una tipica struttura di dati, organizzati in una lista in cui + ciascun elemento contiene un puntatore al successivo. In questo modo la + struttura è veloce nell'estrazione ed immissione dei dati dalle estremità + dalla lista (basta aggiungere un elemento in testa o in coda ed aggiornare + un puntatore), e relativamente veloce da attraversare in ordine sequenziale + (seguendo i puntatori), è invece relativamente lenta nell'accesso casuale e + nella ricerca.} i nuovi messaggi vengono inseriti in coda alla lista e +vengono letti dalla cima, in fig.~\ref{fig:ipc_mq_schema} si è riportato lo +schema con cui queste strutture vengono mantenute dal kernel.\footnote{lo + schema illustrato in fig.~\ref{fig:ipc_mq_schema} è in realtà una + semplificazione di quello usato effettivamente fino ai kernel della serie + 2.2.x, nei kernel della serie 2.4.x la gestione delle code di messaggi è + stata modificata ed è effettuata in maniera diversa; abbiamo mantenuto lo + schema precedente in quanto illustra comunque in maniera più che adeguata i + principi di funzionamento delle code di messaggi.} \begin{figure}[!htb] \footnotesize \centering @@ -2557,9 +2558,9 @@ direttamente, la situazione dopo l'esecuzione di \func{shmat} fig.~\ref{fig:ipc_shmem_layout} (per la comprensione del resto dello schema si ricordi quanto illustrato al proposito in sez.~\ref{sec:proc_mem_layout}). In particolare l'indirizzo finale del segmento dati (quello impostato da -\func{brk}, vedi sez.~\ref{sec:proc_mem_sbrk}) non viene influenzato. Si tenga -presente infine che la funzione ha successo anche se il segmento è stato -marcato per la cancellazione. +\func{brk}, vedi sez.~\ref{sec:proc_mem_sbrk_alloca}) non viene influenzato. +Si tenga presente infine che la funzione ha successo anche se il segmento è +stato marcato per la cancellazione. \begin{figure}[htb] \centering @@ -2640,7 +2641,7 @@ dell'interfaccia, \funcd{shmdt}, il cui prototipo \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di errore, la funzione fallisce solo quando non c'è un segmento agganciato - all'indirizzo \func{shmaddr}, con \var{errno} che assume il valore + all'indirizzo \param{shmaddr}, con \var{errno} che assume il valore \errval{EINVAL}.} \end{functions} diff --git a/prochand.tex b/prochand.tex index 6bdbb5a..870014c 100644 --- a/prochand.tex +++ b/prochand.tex @@ -267,7 +267,7 @@ fig.~\ref{fig:proc_fork_code}, nel programma \file{ForkTest.c}. Il fatto che il \acr{pid} sia un numero univoco per il sistema lo rende un candidato per generare ulteriori indicatori associati al processo di cui diventa possibile garantire l'unicità: ad esempio in alcune implementazioni la -funzione \func{tmpname} (si veda sez.~\ref{sec:file_temp_file}) usa il +funzione \func{tempnam} (si veda sez.~\ref{sec:file_temp_file}) usa il \acr{pid} per generare un \index{\textit{pathname}}\textit{pathname} univoco, che non potrà essere replicato da un altro processo che usi la stessa funzione. diff --git a/session.tex b/session.tex index ec42332..b3ce7d0 100644 --- a/session.tex +++ b/session.tex @@ -1766,7 +1766,7 @@ lette da una struttura \struct{termios} utilizzando altre due funzioni, Anche in questo caso le due funzioni estraggono i valori della velocità della linea da una struttura, il cui indirizzo è specificato dall'argomento \param{termios\_p} che deve essere stata letta in precedenza con -\func{tcgetaddr}. +\func{tcgetattr}. @@ -1786,7 +1786,7 @@ vengono considerate, dal punto di vista dell'accesso al terminale, come delle funzioni di scrittura, pertanto se usate da processi in background sul loro terminale di controllo provocano l'emissione di \const{SIGTTOU} come illustrato in sez.~\ref{sec:sess_ctrl_term}.\footnote{con la stessa eccezione, - già vista per \func{tcsetaddr}, che quest'ultimo sia bloccato o ignorato dal + già vista per \func{tcsetattr}, che quest'ultimo sia bloccato o ignorato dal processo chiamante.} Una prima funzione, che è efficace solo in caso di terminali seriali asincroni diff --git a/signal.tex b/signal.tex index 2972c9f..047ad53 100644 --- a/signal.tex +++ b/signal.tex @@ -1112,7 +1112,7 @@ suo prototipo itimerval *value, struct itimerval *ovalue)} Predispone l'invio di un segnale di allarme alla scadenza dell'intervallo - \param{value} sul timer specificato da \func{which}. + \param{value} sul timer specificato da \param{which}. \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori \errval{EINVAL} o @@ -1208,7 +1208,7 @@ valore corrente di un timer senza modificarlo, \begin{prototype}{sys/time.h}{int getitimer(int which, struct itimerval *value)} - Legge in \param{value} il valore del timer specificato da \func{which}. + Legge in \param{value} il valore del timer specificato da \param{which}. \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di errore e restituisce gli stessi errori di \func{getitimer}} @@ -1839,7 +1839,7 @@ sempre il caso di evitare l'uso di \func{signal} a favore di \func{sigaction}. \includecodesample{listati/Signal.c} \end{minipage} \normalsize - \caption{La funzione \funcd{Signal}, equivalente a \func{signal}, definita + \caption{La funzione \func{Signal}, equivalente a \func{signal}, definita attraverso \func{sigaction}.} \label{fig:sig_Signal_code} \end{figure} @@ -2327,7 +2327,7 @@ funzione, \funcd{sigqueue}, il cui prototipo Il comportamento della funzione è analogo a quello di \func{kill}, ed i privilegi occorrenti ad inviare il segnale ad un determinato processo sono gli -stessi; un valore nullo di \func{signo} permette di verificare le condizioni +stessi; un valore nullo di \param{signo} permette di verificare le condizioni di errore senza inviare nessun segnale. Se il segnale è bloccato la funzione ritorna immediatamente, se si è diff --git a/sockctrl.tex b/sockctrl.tex index 8ff56e3..c1b8d27 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -1370,8 +1370,8 @@ verr argument}) i propri risultati. La funzione infatti è rientrante, ed alloca autonomamente tutta la memoria necessaria in cui verranno riportati i risultati della risoluzione. La funzione scriverà in \param{res} il puntatore -iniziale ad una \textit{linked list} di strutture di tipo \struct{addrinfo} -contenenti tutte le informazioni ottenute. +iniziale ad una \index{\textit{linked~list}}\textit{linked list} di strutture +di tipo \struct{addrinfo} contenenti tutte le informazioni ottenute. La funzione restituisce un valore nullo in caso di successo, o un codice in caso di errore. I valori usati come codice di errore sono riportati in @@ -1461,8 +1461,8 @@ lista illustrata in fig.~\ref{fig:sock_addrinfo_list}. \begin{figure}[!htb] \centering \includegraphics[width=10cm]{img/addrinfo_list} - \caption{La \textit{linked list} delle strutture \struct{addrinfo} - restituite da \func{getaddrinfo}.} + \caption{La \index{\textit{linked~list}}\textit{linked list} delle strutture + \struct{addrinfo} restituite da \func{getaddrinfo}.} \label{fig:sock_addrinfo_list} \end{figure} @@ -1558,10 +1558,11 @@ IPv4 address: \end{Verbatim} %$ -Una volta estratti i risultati dalla \textit{linked list} puntata da -\param{res} se questa non viene più utilizzata si dovrà avere cura di -disallocare opportunamente tutta la memoria, per questo viene fornita -l'apposita funzione \funcd{freeaddrinfo}, il cui prototipo è: +Una volta estratti i risultati dalla +\index{\textit{linked~list}}\textit{linked list} puntata da \param{res} se +questa non viene più utilizzata si dovrà avere cura di disallocare +opportunamente tutta la memoria, per questo viene fornita l'apposita funzione +\funcd{freeaddrinfo}, il cui prototipo è: \begin{functions} \headdecl{netdb.h} @@ -2151,7 +2152,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: sulle operazioni di scrittura su un socket, ed usa gli stessi valori di \const{SO\_RCVTIMEO}. In questo caso però si avrà un errore di \errcode{EAGAIN} o \errcode{EWOULDBLOCK} per le funzioni di scrittura - \func{write}, \func{writev}, \func{send}, \func{sendfrom} e \func{sendmsg} + \func{write}, \func{writev}, \func{send}, \func{sendto} e \func{sendmsg} qualora queste restino bloccate per un tempo maggiore di quello specificato. \item[\const{SO\_BSDCOMPAT}] questa opzione abilita la compatibilità con il diff --git a/sources/SockUtil.c b/sources/SockUtil.c index 8b3fef2..a2a6fcd 100644 --- a/sources/SockUtil.c +++ b/sources/SockUtil.c @@ -195,9 +195,9 @@ int sockbind(char *host, char *serv, int prot, int type) } /**************************************************************** * - * Routine sockbind2 + * Routine sockbindopt * Return a binded socket given hostname, service, and socket type - * Issue a SO_REUSEADDR on the socket before binding. + * Issue a SO_REUSEADDR on the socket before binding on reuse value. * * Author: Simone Piccardi * Mar. 2005 -- 2.30.2