From 0c9d95dfc21869e96f8a3e3ab8111c842e85a1f9 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 2 Apr 2002 22:50:46 +0000 Subject: [PATCH] Proseguito coi segnali, inseriti i tipi di sistema nell'indice --- elemtcp.tex | 4 +-- errors.tex | 2 +- fileintro.tex | 4 +-- filestd.tex | 74 +++++++++++++++++++++++++-------------------------- macro.tex | 5 +++- process.tex | 24 ++++++++--------- prochand.tex | 8 +++--- signal.tex | 29 ++++++++++++-------- socket.tex | 20 +++++++------- system.tex | 46 ++++++++++++++++---------------- 10 files changed, 113 insertions(+), 103 deletions(-) diff --git a/elemtcp.tex b/elemtcp.tex index 7e75f92..7ba25a0 100644 --- a/elemtcp.tex +++ b/elemtcp.tex @@ -703,7 +703,7 @@ consente l'uso di una struttura costante come operando a destra in una assegnazione. Per questo nell'header \file{netinet/in.h} è definita una variabile -\type{in6addr\_any} (dichiarata come \type{extern}, ed inizializzata dal +\type{in6addr\_any} (dichiarata come \ctyp{extern}, ed inizializzata dal sistema al valore \macro{IN6ADRR\_ANY\_INIT}) che permette di effettuare una assegnazione del tipo: @@ -1260,7 +1260,7 @@ connesso (\cmd{inetd} ad esempio fa sempre in modo che i file descriptor 0, Infine è da chiarire (si legga la man page) che come per \func{accept} il terzo parametro che è specificato dallo standard POSIX 1003.1g come di tipo -\type{socklen\_t *} in realtà deve sempre corrispondere ad un \type{int *} +\code{socklen\_t *} in realtà deve sempre corrispondere ad un \ctyp{int *} come prima dello standard perché tutte le implementazioni dei socket BSD fanno questa assunzione. diff --git a/errors.tex b/errors.tex index 239d3ba..c92ae3a 100644 --- a/errors.tex +++ b/errors.tex @@ -9,7 +9,7 @@ tenga presente che spiegazioni pi il caso specifico, possono essere trovate nella descrizione del prototipo della funzione. -I codici di errore sono riportati come costanti di tipo \type{int}, i valori +I codici di errore sono riportati come costanti di tipo \ctyp{int}, i valori delle costanti sono definiti da macro di preprocessore nel file citato, e possono variare da architettura a architettura; è pertanto necessario riferirsi ad essi tramite i nomi simbolici. Le funzioni \func{perror} e diff --git a/fileintro.tex b/fileintro.tex index 0632b7a..14e4f27 100644 --- a/fileintro.tex +++ b/fileintro.tex @@ -205,7 +205,7 @@ bufferizzato in quanto la lettura e la scrittura vengono eseguite chiamando direttamente le system call del kernel (in realtà il kernel effettua al suo interno alcune bufferizzazioni per aumentare l'efficienza nell'accesso ai dispositivi); i \textit{file descriptor}\index{file descriptor} sono -rappresentati da numeri interi (cioè semplici variabili di tipo \type{int}). +rappresentati da numeri interi (cioè semplici variabili di tipo \ctyp{int}). L'interfaccia è definita nell'header \file{unistd.h}. La seconda interfaccia è quella che il manuale della \acr{glibc} chiama degli @@ -217,7 +217,7 @@ Questa anche su tutti i sistemi non Unix. Gli \textit{stream} sono oggetti complessi e sono rappresentati da puntatori ad un opportuna struttura definita dalle librerie del C; si accede ad essi sempre in maniera indiretta utilizzando il -tipo \type{FILE *}. L'interfaccia è definita nell'header \type{stdio.h}. +tipo \ctyp{FILE *}. L'interfaccia è definita nell'header \file{stdio.h}. Entrambe le interfacce possono essere usate per l'accesso ai file come agli altri oggetti del VFS (fifo, socket, device, sui quali torneremo in dettaglio diff --git a/filestd.tex b/filestd.tex index aa4d1cc..cc3e1fd 100644 --- a/filestd.tex +++ b/filestd.tex @@ -59,17 +59,17 @@ formattazioni), i file stream restano del tutto equivalenti ai file descriptor \secref{sec:file_access_control} per il controllo di accesso. -\subsection{Gli oggetti \type{FILE}} +\subsection{Gli oggetti \ctyp{FILE}} \label{sec:file_FILE} Per ragioni storiche la struttura di dati che rappresenta uno stream è stata -chiamata \type{FILE}, questi oggetti sono creati dalle funzioni di libreria e +chiamata \ctyp{FILE}, questi oggetti sono creati dalle funzioni di libreria e contengono tutte le informazioni necessarie a gestire le operazioni sugli stream, come la posizione corrente, lo stato del buffer e degli indicatori di stato e di fine del file. Per questo motivo gli utenti non devono mai utilizzare direttamente o -allocare queste strutture, ma usare sempre puntatori del tipo \type{FILE +allocare queste strutture, ma usare sempre puntatori del tipo \ctyp{FILE *} ottenuti dalla libreria stessa (tanto che in certi casi il termine di puntatore a file è diventato sinonimo di stream). Tutte le funzioni della libreria che operano sui file accettano come parametri solo @@ -102,7 +102,7 @@ definiti nell'header \file{stdio.h} che sono: \end{basedescript} Nelle \acr{glibc} \var{stdin}, \var{stdout} e \var{stderr} sono -effettivamente tre variabili di tipo \type{FILE *} che possono essere +effettivamente tre variabili di tipo \ctyp{FILE *} che possono essere usate come tutte le altre, ad esempio si può effettuare una redirezione dell'output di un programma con il semplice codice: \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} @@ -396,7 +396,7 @@ A differenza dell'interfaccia dei file descriptor, con gli stream il raggiungimento della fine del file è considerato un errore, e viene notificato come tale dai valori di uscita delle varie funzioni. Nella maggior parte dei casi questo avviene con la restituzione del valore -intero (di tipo \type{int}) \macro{EOF}\footnote{la costante deve essere +intero (di tipo \ctyp{int}) \macro{EOF}\footnote{la costante deve essere negativa, le \acr{glibc} usano -1, altre implementazioni possono avere valori diversi.} definito anch'esso nell'header \file{stdlib.h}. @@ -414,7 +414,7 @@ funzionamento di \var{errno}). Per questo motivo tutte le implementazioni delle librerie standard mantengono per ogni stream almeno due flag all'interno dell'oggetto -\type{FILE}, il flag di \textit{end-of-file}, che segnala che si è +\ctyp{FILE}, il flag di \textit{end-of-file}, che segnala che si è raggiunta la fine del file in lettura, e quello di errore, che segnala la presenza di un qualche errore nelle operazioni di input/output; questi due flag possono essere riletti dalle funzioni: @@ -609,15 +609,15 @@ della chiamata, ma essere passato come parametro ad un altra funzione (e non si hanno i problemi accennati in precedenza con \param{stream}). -Le tre funzioni restituiscono tutte un \type{unsigned char} convertito -ad \type{int} (si usa \type{unsigned char} in modo da evitare +Le tre funzioni restituiscono tutte un \ctyp{unsigned char} convertito +ad \ctyp{int} (si usa \ctyp{unsigned char} in modo da evitare l'espansione del segno). In questo modo il valore di ritorno è sempre positivo, tranne in caso di errore o fine del file. Nelle estensioni GNU che provvedono la localizzazione sono definite tre funzioni equivalenti alle precedenti che invece di un carattere di un byte restituiscono un carattere in formato esteso (cioè di tipo -\type{wint\_t}, il loro prototipo è: +\ctyp{wint\_t}, il loro prototipo è: \begin{functions} \headdecl{stdio.h} \headdecl{wchar.h} @@ -654,8 +654,8 @@ precedenti usate per leggere: \func{putc}, \func{fputc} e \end{functions} Tutte queste funzioni scrivono sempre un byte alla volta, anche se -prendono come parametro un \type{int} (che pertanto deve essere ottenuto -con un cast da un \type{unsigned char}). Anche il valore di ritorno è +prendono come parametro un \ctyp{int} (che pertanto deve essere ottenuto +con un cast da un \ctyp{unsigned char}). Anche il valore di ritorno è sempre un intero; in caso di errore o fine del file il valore di ritorno è \macro{EOF}. @@ -666,7 +666,7 @@ esattamente le stesse operazioni evitando per stream. Per compatibilità con SVID sono provviste anche due funzioni per leggere -e scrivere una \textit{word} (che è sempre definita come \type{int}); i +e scrivere una \textit{word} (che è sempre definita come \ctyp{int}); i loro prototipi sono: \begin{functions} \headdecl{stdio.h} @@ -694,7 +694,7 @@ leggendo il carattere, e poi rimandandolo indietro, cosicch disponibile per una lettura successiva; la funzione che inverte la lettura si chiama \func{ungetc} ed il suo prototipo è: \begin{prototype}{stdio.h}{int ungetc(int c, FILE *stream)} - Rimanda indietro il carattere \param{c}, con un cast a \type{unsigned + Rimanda indietro il carattere \param{c}, con un cast a \ctyp{unsigned char}, sullo stream \param{stream}. \bodydesc{La funzione ritorna \param{c} in caso di successo e @@ -969,34 +969,34 @@ dei parametri che dovranno essere passati a seguire. \textbf{Valore} & \textbf{Tipo} & \textbf{Significato} \\ \hline \hline - \cmd{\%d} &\type{int} & Stampa un numero intero in formato decimale + \cmd{\%d} &\ctyp{int} & Stampa un numero intero in formato decimale con segno \\ - \cmd{\%i} &\type{int} & Identico a \cmd{\%i} in output, \\ - \cmd{\%o} &\type{unsigned int}& Stampa un numero intero come ottale\\ - \cmd{\%u} &\type{unsigned int}& Stampa un numero intero in formato + \cmd{\%i} &\ctyp{int} & Identico a \cmd{\%i} in output, \\ + \cmd{\%o} &\ctyp{unsigned int}& Stampa un numero intero come ottale\\ + \cmd{\%u} &\ctyp{unsigned int}& Stampa un numero intero in formato decimale senza segno \\ \cmd{\%x}, - \cmd{\%X} &\type{unsigned int}& Stampano un intero in formato esadecimale, + \cmd{\%X} &\ctyp{unsigned int}& Stampano un intero in formato esadecimale, rispettivamente con lettere minuscole e maiuscole. \\ - \cmd{\%f} &\type{unsigned int}& Stampa un numero in virgola mobile con la + \cmd{\%f} &\ctyp{unsigned int}& Stampa un numero in virgola mobile con la notazione a virgola fissa \\ \cmd{\%e}, - \cmd{\%E} &\type{double} & Stampano un numero in virgola mobile con la + \cmd{\%E} &\ctyp{double} & Stampano un numero in virgola mobile con la notazione esponenziale, rispettivamente con lettere minuscole e maiuscole. \\ \cmd{\%g}, - \cmd{\%G} &\type{double} & Stampano un numero in virgola mobile con la + \cmd{\%G} &\ctyp{double} & Stampano un numero in virgola mobile con la notazione più appropriate delle due precedenti, rispettivamente con lettere minuscole e maiuscole. \\ \cmd{\%a}, - \cmd{\%A} &\type{double} & Stampano un numero in virgola mobile in + \cmd{\%A} &\ctyp{double} & Stampano un numero in virgola mobile in notazione esadecimale frazionaria\\ - \cmd{\%c} &\type{int} & Stampa un carattere singolo\\ - \cmd{\%s} &\type{char *} & Stampa una stringa \\ - \cmd{\%p} &\type{void *} & Stampa il valore di un puntatore\\ - \cmd{\%n} &\type{\&int} & Prende il numero di caratteri stampati finora\\ + \cmd{\%c} &\ctyp{int} & Stampa un carattere singolo\\ + \cmd{\%s} &\ctyp{char *} & Stampa una stringa \\ + \cmd{\%p} &\ctyp{void *} & Stampa il valore di un puntatore\\ + \cmd{\%n} &\ctyp{\&int} & Prende il numero di caratteri stampati finora\\ \cmd{\%\%}& & Stampa un \% \\ \hline \end{tabular} @@ -1067,21 +1067,21 @@ di \func{printf} e nella documentazione delle \acr{glibc}. \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \cmd{hh} & una conversione intera corrisponde a un \type{char} con o senza + \cmd{hh} & una conversione intera corrisponde a un \ctyp{char} con o senza segno, o il puntatore per il numero dei parametri \cmd{n} è di - tipo \type{char}.\\ - \cmd{h} & una conversione intera corrisponde a uno \type{short} con o + tipo \ctyp{char}.\\ + \cmd{h} & una conversione intera corrisponde a uno \ctyp{short} con o senza segno, o il puntatore per il numero dei parametri \cmd{n} - è di tipo \type{short}.\\ - \cmd{l} & una conversione intera corrisponde a un \type{long} con o + è di tipo \ctyp{short}.\\ + \cmd{l} & una conversione intera corrisponde a un \ctyp{long} con o senza segno, o il puntatore per il numero dei parametri \cmd{n} - è di tipo \type{long}, o il carattere o la stringa seguenti + è di tipo \ctyp{long}, o il carattere o la stringa seguenti sono in formato esteso.\\ - \cmd{ll} & una conversione intera corrisponde a un \type{long long} con o + \cmd{ll} & una conversione intera corrisponde a un \ctyp{long long} con o senza segno, o il puntatore per il numero dei parametri \cmd{n} - è di tipo \type{long long}.\\ + è di tipo \ctyp{long long}.\\ \cmd{L} & una conversione in virgola mobile corrisponde a un - \type{double}.\\ + \ctyp{double}.\\ \cmd{q} & sinonimo di \cmd{ll}.\\ \cmd{j} & una conversione intera corrisponde a un \type{intmax\_t} o \type{uintmax\_t}.\\ @@ -1275,7 +1275,7 @@ cui prototipo \bodydesc{La funzione restituisce la posizione corrente, o -1 in caso di fallimento, che può esser dovuto sia al fatto che il file non supporta il riposizionamento che al fatto che la posizione non può - essere espressa con un \type{long int}} + essere espressa con un \ctyp{long int}} \end{prototype} \noindent la funzione restituisce la posizione come numero di byte dall'inizio dello stream. @@ -1301,7 +1301,7 @@ pu In Linux, a partire dalle glibc 2.1, sono presenti anche le due funzioni \func{fseeko} e \func{ftello}, che assolutamente identiche alle precedenti \func{fseek} e \func{ftell} ma hanno argomenti di tipo \type{off\_t} anziché -di tipo \type{long int}. +di tipo \ctyp{long int}. diff --git a/macro.tex b/macro.tex index 9854b62..a3aa82a 100644 --- a/macro.tex +++ b/macro.tex @@ -127,7 +127,10 @@ tab.~\thechapter.\theusercount} \newcommand{\var}[1]{\texttt{#1}} % variable \newcommand{\file}[1]{\texttt{#1}} % file name \newcommand{\link}[1]{\texttt{#1}} % html link -\newcommand{\type}[1]{\texttt{#1}} % variable type +\newcommand{\ctyp}[1]{\texttt{#1}} % C standard type +\newcommand{\type}[1]{% +\index{#1@{\tt {#1}}}\texttt{#1}% +} % system type \newcommand{\param}[1]{\texttt{#1}} % function parameter \newcommand{\acr}[1]{\textsl{#1}} % acrostic (for pid, suid, etc.) diff --git a/process.tex b/process.tex index 554f4d6..d23e54f 100644 --- a/process.tex +++ b/process.tex @@ -108,7 +108,7 @@ uno stato di uscita uguale a zero, che verrebbe interpretato come un successo. In \file{stdlib.h} sono definite, seguendo lo standard POSIX, le due macro \macro{EXIT\_SUCCESS} e \macro{EXIT\_FAILURE}, da usare sempre per specificare lo stato di uscita di un processo. In Linux esse sono poste rispettivamente ai -valori di tipo \type{int} 0 e 1. +valori di tipo \ctyp{int} 0 e 1. \subsection{Le funzioni \func{exit} e \func{\_exit}} @@ -341,7 +341,7 @@ programma C viene suddiviso nei seguenti segmenti: \item Il segmento dei dati o \textit{data segment}. Contiene le variabili globali (cioè quelle definite al di fuori di tutte le funzioni che compongono il programma) e le variabili statiche (cioè quelle dichiarate con - l'attributo \type{static}). Di norma è diviso in due parti. + l'attributo \ctyp{static}). Di norma è diviso in due parti. La prima parte è il segmento dei dati inizializzati, che contiene le variabili il cui valore è stato assegnato esplicitamente. Ad esempio @@ -1131,7 +1131,7 @@ ambiente; il suo prototipo \end{functions} \noindent questa funzione elimina ogni occorrenza della variabile specificata; se essa non esiste non succede nulla. Non è prevista (dato che la funzione è -\type{void}) nessuna segnalazione di errore. +\ctyp{void}) nessuna segnalazione di errore. Per modificare o aggiungere una variabile di ambiente si possono usare sia \func{setenv} che \func{putenv}. La prima permette di specificare @@ -1151,7 +1151,7 @@ invece esiste il suo valore sar seguendo il comportamento di BSD4.4; dato che questo può dar luogo a perdite di memoria e non rispetta lo standard. Il comportamento è stato modificato a partire dalle 2.1.2, eliminando anche, sempre in conformità a SUSv2, - l'attributo \type{const} dal prototipo.} \param{string} alla lista delle + l'attributo \ctyp{const} dal prototipo.} \param{string} alla lista delle variabili di ambiente; pertanto ogni cambiamento alla stringa in questione si riflette automaticamente sull'ambiente, e quindi si deve evitare di passare a questa funzione una variabile automatica (per evitare i problemi esposti in @@ -1261,13 +1261,13 @@ del vettore \var{argv} passato al nuovo processo). Lo standard ISO C richiede inoltre che l'ultimo degli argomenti fissi sia di tipo \textit{self-promoting}\footnote{il linguaggio C prevede che quando si mescolano vari tipi di dati, alcuni di essi possano essere \textsl{promossi} - per compatibilità; ad esempio i tipi \type{float} vengono convertiti - automaticamente a \type{double} ed i \type{char} e gli \type{short} ad - \type{int}. Un tipo \textit{self-promoting} è un tipo che verrebbe promosso + per compatibilità; ad esempio i tipi \ctyp{float} vengono convertiti + automaticamente a \ctyp{double} ed i \ctyp{char} e gli \ctyp{short} ad + \ctyp{int}. Un tipo \textit{self-promoting} è un tipo che verrebbe promosso a sé stesso.} il che esclude array, puntatori a funzioni e interi di tipo -\type{char} o \type{short} (con segno o meno). Una restrizione ulteriore di +\ctyp{char} o \ctyp{short} (con segno o meno). Una restrizione ulteriore di alcuni compilatori è di non dichiarare l'ultimo parametro fisso come -\type{register}. +\ctyp{register}. Una volta dichiarata la funzione il secondo passo è accedere ai vari parametri quando la si va a definire. I parametri fissi infatti hanno un loro nome, ma @@ -1360,8 +1360,8 @@ In Linux gli argomenti dello stesso tipo sono passati allo stesso modo, sia che siano fissi sia che siano opzionali (alcuni sistemi trattano diversamente gli opzionali), ma dato che il prototipo non può specificare il tipo degli argomenti opzionali, questi verranno sempre promossi, pertanto nella ricezione -dei medesimi occorrerà tenerne conto (ad esempio un \type{char} verrà visto da -\macro{va\_arg} come \type{int}). +dei medesimi occorrerà tenerne conto (ad esempio un \ctyp{char} verrà visto da +\macro{va\_arg} come \ctyp{int}). Uno dei problemi che si devono affrontare con le funzioni con un numero @@ -1394,7 +1394,7 @@ Per questo una delle regole fondamentali della programmazione in C all'uscita di una funzione non deve restare nessun riferimento alle variabili locali; qualora sia necessario utilizzare variabili che possano essere viste anche dalla funzione chiamante queste devono essere allocate esplicitamente, o -in maniera statica (usando variabili di tipo \type{static} o \type{extern}), o +in maniera statica (usando variabili di tipo \ctyp{static} o \ctyp{extern}), o dinamicamente con una delle funzioni della famiglia \func{malloc}. \subsection{Il controllo di flusso non locale} diff --git a/prochand.tex b/prochand.tex index d4b7de2..97e25c1 100644 --- a/prochand.tex +++ b/prochand.tex @@ -211,7 +211,7 @@ Come accennato nell'introduzione, ogni processo viene identificato dal sistema da un numero identificativo unico, il \textit{process id} o \acr{pid}; quest'ultimo è un tipo di dato standard, il \type{pid\_t} che in genere è un intero con segno (nel caso di Linux e delle \acr{glibc} il tipo usato è -\type{int}). +\ctyp{int}). Il \acr{pid} viene assegnato in forma progressiva ogni volta che un nuovo processo viene creato, fino ad un limite che, essendo il \acr{pid} un numero @@ -996,7 +996,7 @@ Lo standard POSIX.1 definisce una serie di macro di preprocessore da usare per analizzare lo stato di uscita. Esse sono definite sempre in \file{} ed elencate in \tabref{tab:proc_status_macro} (si tenga presente che queste macro prendono come parametro la variabile di tipo -\type{int} puntata da \var{status}). +\ctyp{int} puntata da \var{status}). Si tenga conto che nel caso di conclusione anomala il valore restituito da \macro{WTERMSIG} può essere confrontato con le costanti definite in @@ -2104,11 +2104,11 @@ operazioni atomiche (torneremo su questi aspetti in 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ò assumere che, in ogni piattaforma su cui è implementato Linux, il tipo -\type{int}, gli altri interi di dimensione inferiore ed i puntatori sono +\ctyp{int}, gli altri interi di dimensione inferiore ed i puntatori sono atomici. Non è affatto detto che lo stesso valga per interi di dimensioni maggiori (in cui l'accesso può comportare più istruzioni in assembler) o per le strutture. In tutti questi casi è anche opportuno marcare come -\type{volatile} le variabili che possono essere interessate ad accesso +\ctyp{volatile} le variabili che possono essere interessate ad accesso condiviso, onde evitare problemi con le ottimizzazioni del codice. diff --git a/signal.tex b/signal.tex index 98e476e..3784e17 100644 --- a/signal.tex +++ b/signal.tex @@ -883,11 +883,11 @@ con il precedente prototipo si pu \begin{verbatim} typedef void (* sighandler_t)(int) \end{verbatim} -e cioè un puntatore ad una funzione \type{void} (cioè senza valore di ritorno) -e che prende un argomento di tipo \type{int}.\footnote{si devono usare le +e cioè un puntatore ad una funzione \ctyp{void} (cioè senza valore di ritorno) +e che prende un argomento di tipo \ctyp{int}.\footnote{si devono usare le parentesi intorno al nome della funzione per via delle precedenze degli operatori del C, senza di esse si sarebbe definita una funzione che ritorna - un puntatore a \type{void} e non un puntatore ad una funzione \type{void}.} + un puntatore a \ctyp{void} e non un puntatore ad una funzione \ctyp{void}.} La funzione \func{signal} quindi restituisce e prende come secondo argomento un puntatore a una funzione di questo tipo, che è appunto il manipolatore del segnale. @@ -1617,15 +1617,25 @@ motivo che occorrono funzioni pi permettano di gestire i segnali in maniera più completa. +\subsection{I \textit{signal set}} +\label{sec:sig_sigset} + +Come evidenziato nel paragrafo precedente, le funzioni di gestione dei segnali +dei primi Unix, nate con la semantica inaffidabile, hanno dei limiti non +superabili; in particolare non è prevista nessuna funzione che permetta di +gestire correttamente i segnali pendenti e bloccati. + +Per questo motivo lo standard POSIX, insieme alla nuova semantica dei segnali +ha introdotto una interfaccia di gestione completamente nuova, che permette un +controllo molto più dettagliato. In particolare lo standard ha introdotto un +nuovo tipo di dato \type{sigset\_t}. \subsection{La funzione \func{sigaction}} \label{sec:sig_sigaction} -Come evidenziato nel paragrafo precedente, le funzioni di gestione dei segnali -dei primi Unix, hanno dei limiti non superabili; per questo motivo lo standard -POSIX ha introdotto una interfaccia di gestione completamente nuova, che -permette un controllo molto più dettagliato. La funzione principale di questa -nuova interfaccia è \func{sigaction}; il cui prototipo è: + +La funzione principale di questa nuova interfaccia è \func{sigaction}; il cui +prototipo è: \begin{prototype}{signal.h}{int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact)} @@ -1683,9 +1693,6 @@ struct sigaction { \end{figure} -\subsection{I \textit{signal set}} -\label{sec:sig_sigset} - \subsection{Le funzioni \func{sigpending} e \func{sigsuspend}} \label{sec:sig_sigpending} diff --git a/socket.tex b/socket.tex index 619c1dd..8282622 100644 --- a/socket.tex +++ b/socket.tex @@ -203,7 +203,7 @@ comunicazione, questo infatti viene a dipendere dal protocollo che si andr utilizzare fra quelli disponibili nella famiglia scelta. Le API permettono di scegliere lo stile di comunicazione indicando il tipo di socket; Linux e le glibc mettono a disposizione i seguenti tipi di socket (che il manuale della -glibc chiama \textit{styles}) definiti come \type{int} in \file{socket.h}: +glibc chiama \textit{styles}) definiti come \ctyp{int} in \file{socket.h}: \begin{list}{}{} \item \macro{SOCK\_STREAM} Provvede un canale di trasmissione dati @@ -300,7 +300,7 @@ attraverso puntatori (cio maneggiare puntatori a strutture relative a tutti gli indirizzi possibili nelle varie famiglie di protocolli; questo pone il problema di come passare questi puntatori, il C ANSI risolve questo problema coi i puntatori generici -(i \type{void *}), ma l'interfaccia dei socket è antecedente alla +(i \ctyp{void *}), ma l'interfaccia dei socket è antecedente alla definizione dello standard ANSI, e per questo nel 1982 fu scelto di definire una struttura generica \type{sockaddr} per gli indirizzi dei socket mostrata in \nfig: @@ -345,12 +345,12 @@ definiti; la struttura \hline \type{sa\_family\_t} & famiglia degli indirizzi& \file{sys/socket.h}\\ \type{socklen\_t} & lunghezza (\type{uint32\_t}) dell'indirizzo di - un socket& \type{sys/socket.h}\\ + un socket& \file{sys/socket.h}\\ \hline - \type{in\_addr\_t} & indirizzo IPv4 (\file{uint32\_t}) & - \type{netinet/in.h}\\ - \type{in\_port\_t} & porta TCP o UDP (\file{uint16\_t})& - \type{netinet/in.h}\\ + \type{in\_addr\_t} & indirizzo IPv4 (\type{uint32\_t}) & + \file{netinet/in.h}\\ + \type{in\_port\_t} & porta TCP o UDP (\type{uint16\_t})& + \file{netinet/in.h}\\ \hline \end{tabular} \caption{Tipi di dati usati nelle strutture degli indirizzi, secondo quanto @@ -362,13 +362,13 @@ In alcuni sistemi la struttura aggiuntivo \var{uint8\_t sin\_len} (come riportato da R. Stevens nei suoi libri). Questo campo non verrebbe usato direttamente dal programmatore e non è richiesto dallo standard POSIX.1g, in Linux pertanto non esiste. Il campo -\type{sa\_family\_t} era storicamente un \type{unsigned short}. +\type{sa\_family\_t} era storicamente un \ctyp{unsigned short}. Dal punto di vista del programmatore l'unico uso di questa struttura è quello di fare da riferimento per il casting, per il kernel le cose sono un po' diverse, in quanto esso usa il puntatore per recuperare il campo \var{sa\_family} con cui determinare il tipo di indirizzo; per questo -motivo, anche se l'uso di un puntatore \type{void *} sarebbe più immediato +motivo, anche se l'uso di un puntatore \ctyp{void *} sarebbe più immediato per l'utente (che non dovrebbe più eseguire il casting), è stato mantenuto l'uso di questa struttura. @@ -606,7 +606,7 @@ I nomi sono assegnati usando la lettera \texttt{n} come mnemonico per indicare l'ordinamento usato sulla rete (da \textit{network order}) e la lettera \texttt{h} come mnemonico per l'ordinamento usato sulla macchina locale (da \textit{host order}), mentre le lettere \texttt{s} e \texttt{l} stanno ad -indicare i tipi di dato (\type{long} o \type{short}, riportati anche dai +indicare i tipi di dato (\ctyp{long} o \ctyp{short}, riportati anche dai prototipi). Usando queste funzioni si ha la conversione automatica: nel caso in cui la diff --git a/system.tex b/system.tex index b2a7b3c..63b46f6 100644 --- a/system.tex +++ b/system.tex @@ -78,21 +78,21 @@ avere un valore minimo di 8. \hline \macro{MB\_LEN\_MAX}& 16 & massima dimensione di un carattere esteso\\ - \macro{CHAR\_BIT} & 8 & bit di \type{char}\\ - \macro{UCHAR\_MAX}& 255 & massimo di \type{unsigned char}\\ - \macro{SCHAR\_MIN}& -128 & minimo di \type{signed char}\\ - \macro{SCHAR\_MAX}& 127 & massimo di \type{signed char}\\ - \macro{CHAR\_MIN} &\footnotemark& minimo di \type{char}\\ - \macro{CHAR\_MAX} &\footnotemark& massimo di \type{char}\\ - \macro{SHRT\_MIN} & -32768 & minimo di \type{short}\\ - \macro{SHRT\_MAX} & 32767 & massimo di \type{short}\\ - \macro{USHRT\_MAX}& 65535 & massimo di \type{unsigned short}\\ - \macro{INT\_MAX} & 2147483647 & minimo di \type{int}\\ - \macro{INT\_MIN} &-2147483648 & minimo di \type{int}\\ - \macro{UINT\_MAX} & 4294967295 & massimo di \type{unsigned int}\\ - \macro{LONG\_MAX} & 2147483647 & massimo di \type{long}\\ - \macro{LONG\_MIN} &-2147483648 & minimo di \type{long}\\ - \macro{ULONG\_MAX}& 4294967295 & massimo di \type{unsigned long}\\ + \macro{CHAR\_BIT} & 8 & bit di \ctyp{char}\\ + \macro{UCHAR\_MAX}& 255 & massimo di \ctyp{unsigned char}\\ + \macro{SCHAR\_MIN}& -128 & minimo di \ctyp{signed char}\\ + \macro{SCHAR\_MAX}& 127 & massimo di \ctyp{signed char}\\ + \macro{CHAR\_MIN} &\footnotemark& minimo di \ctyp{char}\\ + \macro{CHAR\_MAX} &\footnotemark& massimo di \ctyp{char}\\ + \macro{SHRT\_MIN} & -32768 & minimo di \ctyp{short}\\ + \macro{SHRT\_MAX} & 32767 & massimo di \ctyp{short}\\ + \macro{USHRT\_MAX}& 65535 & massimo di \ctyp{unsigned short}\\ + \macro{INT\_MAX} & 2147483647 & minimo di \ctyp{int}\\ + \macro{INT\_MIN} &-2147483648 & minimo di \ctyp{int}\\ + \macro{UINT\_MAX} & 4294967295 & massimo di \ctyp{unsigned int}\\ + \macro{LONG\_MAX} & 2147483647 & massimo di \ctyp{long}\\ + \macro{LONG\_MIN} &-2147483648 & minimo di \ctyp{long}\\ + \macro{ULONG\_MAX}& 4294967295 & massimo di \ctyp{unsigned long}\\ \hline \end{tabular} \caption{Costanti definite in \file{limits.h} in conformità allo standard @@ -107,7 +107,7 @@ avere un valore minimo di 8. a seconda che il sistema usi caratteri con segno o meno.} A questi valori lo standard ISO C90 ne aggiunge altri tre, relativi al tipo -\type{long long} introdotto con il nuovo standard, i relativi valori sono in +\ctyp{long long} introdotto con il nuovo standard, i relativi valori sono in \tabref{tab:sys_isoc90_macro}. \begin{table}[htb] @@ -118,10 +118,10 @@ A questi valori lo standard ISO C90 ne aggiunge altri tre, relativi al tipo \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \macro{LLONG\_MAX}& 9223372036854775807& massimo di \type{long long}\\ - \macro{LLONG\_MIN}&-9223372036854775808& minimo di \type{long long}\\ + \macro{LLONG\_MAX}& 9223372036854775807& massimo di \ctyp{long long}\\ + \macro{LLONG\_MIN}&-9223372036854775808& minimo di \ctyp{long long}\\ \macro{ULLONG\_MAX}&18446744073709551615& - massimo di \type{unsigned long long}\\ + massimo di \ctyp{unsigned long long}\\ \hline \end{tabular} \caption{Macro definite in \file{limits.h} in conformità allo standard @@ -582,7 +582,7 @@ attraverso l'array \param{name}, di lunghezza \param{nlen}, che contiene la sequenza dei vari nodi da attraversare. Ogni parametro ha un valore in un formato specifico chee può essere un intero, una stringa o anche una struttura complessa, per questo motivo il valori vengono passati come puntatori -\type{void}. +\ctyp{void}. L'indirizzo a cui il valore corrente del parametro deve essere letto è specificato da \param{oldvalue}, e lo spazio ivi disponibile è specificato da @@ -660,8 +660,8 @@ sulla directory \param{target}. \item[\macro{EINVAL}] il device \param{source} presenta un \textit{superblock} non valido, o si è cercato di rimontare un filesystem non ancora montato, o di montarlo senza che \param{target} sia un - \type{mount point} o di spostarlo quando \param{target} non è un - \type{mount point} o è \file{/}. + \textit{mount point} o di spostarlo quando \param{target} non è un + \textit{mount point} o è \file{/}. \item[\macro{EACCES}] non si ha il permesso di accesso su uno dei componenti del pathname, o si è cercato di montare un filesystem disponibile in sola lettura senza averlo specificato o il device \param{source} è su un @@ -1052,7 +1052,7 @@ Per riportare il tipo di errore il sistema usa la variabile globale anche di definire \var{errno} come un \textit{modifiable lvalue}, quindi si può anche usare una macro, e questo è infatti il modo usato da Linux per renderla locale ai singoli thread.} definita nell'header \file{errno.h}; la -variabile è in genere definita come \type{volatile} dato che può essere +variabile è in genere definita come \ctyp{volatile} dato che può essere cambiata in modo asincrono da un segnale (si veda \ref{sec:sig_sigchld} per un esempio, ricordando quanto trattato in \ref{sec:proc_race_cond}), ma dato che un manipolatore di segnale scritto bene salva e ripristina il valore della -- 2.30.2