X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=59d68e1f500bf5c9fdec298093d62fa0df6a8c99;hp=82dbfd5d175faeb13659eeaff9de5451b8fd9403;hb=ee41e8b34dd560d230966160fb3eb748defc3e46;hpb=06a2f2c7718cebc7cc4ccb894999028a62b6256d diff --git a/system.tex b/system.tex index 82dbfd5..59d68e1 100644 --- a/system.tex +++ b/system.tex @@ -1,6 +1,6 @@ %% system.tex %% -%% Copyright (C) 2000-2007 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2009 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -708,8 +708,8 @@ sulla directory \param{target}. di montare un filesystem disponibile in sola lettura senza averlo specificato o il device \param{source} è su un filesystem montato con l'opzione \const{MS\_NODEV}. - \item[\errcode{ENXIO}] il \textit{major number} del device \param{source} è - sbagliato. + \item[\errcode{ENXIO}] il \itindex{major~number} \textit{major number} del + device \param{source} è sbagliato. \item[\errcode{EMFILE}] la tabella dei device \textit{dummy} è piena. \end{errlist} ed inoltre \errval{ENOTDIR}, \errval{EFAULT}, \errval{ENOMEM}, @@ -797,6 +797,8 @@ valori riportati in tab.~\ref{tab:sys_mount_flags}. \end{table} % TODO aggiornare con i nuovi flag di man mount +% gli S_* non esistono più come segnalato da Alessio... +% verificare i readonly mount bind del 2.6.26 Per l'impostazione delle caratteristiche particolari di ciascun filesystem si usa invece l'argomento \param{data} che serve per passare le ulteriori @@ -1018,9 +1020,9 @@ La struttura usata da entrambe le funzioni motivo viene sovrascritta ad ogni nuova invocazione, lo stesso dicasi per la memoria dove sono scritte le stringhe a cui i puntatori in essa contenuti fanno riferimento. Ovviamente questo implica che dette funzioni non possono -essere rientranti; per questo motivo ne esistono anche due versioni -alternative (denotate dalla solita estensione \code{\_r}), i cui prototipi -sono: +essere \index{funzioni!rientranti} rientranti; per questo motivo ne esistono +anche due versioni alternative (denotate dalla solita estensione \code{\_r}), +i cui prototipi sono: \begin{functions} \headdecl{pwd.h} @@ -1051,9 +1053,9 @@ funzione fallir impostato a \val{NULL}). Del tutto analoghe alle precedenti sono le funzioni \funcd{getgrnam} e -\funcd{getgrgid} (e le relative analoghe rientranti con la stessa estensione -\code{\_r}) che permettono di leggere le informazioni relative ai gruppi, i -loro prototipi sono: +\funcd{getgrgid} (e le relative analoghe \index{funzioni!rientranti} +rientranti con la stessa estensione \code{\_r}) che permettono di leggere le +informazioni relative ai gruppi, i loro prototipi sono: \begin{functions} \headdecl{grp.h} \headdecl{sys/types.h} @@ -1114,19 +1116,23 @@ file di \textsl{registro} di utenti e gruppi, con il formato classico di \hline \func{fgetpwent} & Legge una voce dal file di registro degli utenti specificato.\\ - \func{fgetpwent\_r}& Come la precedente, ma rientrante.\\ + \func{fgetpwent\_r}& Come la precedente, ma \index{funzioni!rientranti} + rientrante.\\ \func{putpwent} & Immette una voce in un file di registro degli utenti.\\ \func{getpwent} & Legge una voce da \conffile{/etc/passwd}.\\ - \func{getpwent\_r} & Come la precedente, ma rientrante.\\ + \func{getpwent\_r} & Come la precedente, ma \index{funzioni!rientranti} + rientrante.\\ \func{setpwent} & Ritorna all'inizio di \conffile{/etc/passwd}.\\ \func{endpwent} & Chiude \conffile{/etc/passwd}.\\ \func{fgetgrent} & Legge una voce dal file di registro dei gruppi specificato.\\ - \func{fgetgrent\_r}& Come la precedente, ma rientrante.\\ + \func{fgetgrent\_r}& Come la precedente, ma \index{funzioni!rientranti} + rientrante.\\ \func{putgrent} & Immette una voce in un file di registro dei gruppi.\\ \func{getgrent} & Legge una voce da \conffile{/etc/group}.\\ - \func{getgrent\_r} & Come la precedente, ma rientrante.\\ + \func{getgrent\_r} & Come la precedente, ma \index{funzioni!rientranti} + rientrante.\\ \func{setgrent} & Ritorna all'inizio di \conffile{/etc/group}.\\ \func{endgrent} & Chiude \conffile{/etc/group}.\\ \hline @@ -1328,14 +1334,16 @@ gestione (\func{getutxent}, \func{getutxid}, \func{getutxline}, sinonimi delle funzioni appena viste. Come visto in sez.~\ref{sec:sys_user_group}, l'uso di strutture allocate -staticamente rende le funzioni di lettura non rientranti; per questo motivo le -\acr{glibc} forniscono anche delle versioni rientranti: \func{getutent\_r}, -\func{getutid\_r}, \func{getutline\_r}, che invece di restituire un puntatore -restituiscono un intero e prendono due argomenti aggiuntivi. Le funzioni si -comportano esattamente come le analoghe non rientranti, solo che restituiscono -il risultato all'indirizzo specificato dal primo argomento aggiuntivo (di tipo -\code{struct utmp *buffer}) mentre il secondo (di tipo \code{struct utmp - **result)} viene usato per restituire il puntatore allo stesso buffer. +staticamente rende le funzioni di lettura non \index{funzioni!rientranti} +rientranti; per questo motivo le \acr{glibc} forniscono anche delle versioni +\index{funzioni!rientranti} rientranti: \func{getutent\_r}, \func{getutid\_r}, +\func{getutline\_r}, che invece di restituire un puntatore restituiscono un +intero e prendono due argomenti aggiuntivi. Le funzioni si comportano +esattamente come le analoghe non \index{funzioni!rientranti} rientranti, solo +che restituiscono il risultato all'indirizzo specificato dal primo argomento +aggiuntivo (di tipo \code{struct utmp *buffer}) mentre il secondo (di tipo +\code{struct utmp **result)} viene usato per restituire il puntatore allo +stesso buffer. Infine le \acr{glibc} forniscono come estensione per la scrittura delle voci in \file{wmtp} altre due funzioni, \funcd{updwtmp} e \funcd{logwtmp}, i cui @@ -1475,7 +1483,7 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard esse falliranno con un errore di \errcode{ENOMEM}, mentre se il superamento viene causato dalla crescita dello \itindex{stack} - stack il processo riceverà un segnale di + \textit{stack} il processo riceverà un segnale di \const{SIGSEGV}.\\ \const{RLIMIT\_CORE} & La massima dimensione per di un file di \itindex{core~dump} \textit{core dump} (vedi @@ -1537,9 +1545,9 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard si potrà sempre inviare un segnale che non sia già presente su una coda.\footnotemark\\ \const{RLIMIT\_STACK} & La massima dimensione dello \itindex{stack} - stack del - processo. Se il processo esegue operazioni che - estendano lo stack oltre questa dimensione + \textit{stack} del processo. Se il processo + esegue operazioni che estendano lo + \textit{stack} oltre questa dimensione riceverà un segnale di \const{SIGSEGV}.\\ \const{RLIMIT\_RSS} & L'ammontare massimo di pagine di memoria dato al \index{segmento!testo} testo del processo. Il @@ -2281,11 +2289,11 @@ stringa, allocata staticamente, nella forma: e impostano anche la variabile \var{tzname} con l'informazione della \textit{time zone} corrente; \func{ctime} è banalmente definita in termini di \func{asctime} come \code{asctime(localtime(t)}. Dato che l'uso di una stringa -statica rende le funzioni non rientranti POSIX.1c e SUSv2 prevedono due -sostitute rientranti, il cui nome è al solito ottenuto aggiungendo un -\code{\_r}, che prendono un secondo argomento \code{char *buf}, in cui -l'utente deve specificare il buffer su cui la stringa deve essere copiata -(deve essere di almeno 26 caratteri). +statica rende le funzioni non \index{funzioni!rientranti} rientranti POSIX.1c +e SUSv2 prevedono due sostitute \index{funzioni!rientranti} rientranti, il cui +nome è al solito ottenuto aggiungendo un \code{\_r}, che prendono un secondo +argomento \code{char *buf}, in cui l'utente deve specificare il buffer su cui +la stringa deve essere copiata (deve essere di almeno 26 caratteri). Le altre tre funzioni, \func{gmtime}, \func{localtime} e \func{mktime} servono per convertire il tempo dal formato \type{time\_t} a quello di \struct{tm} e @@ -2295,9 +2303,10 @@ locale; \func{mktime} esegue la conversione inversa. Anche in questo caso le prime due funzioni restituiscono l'indirizzo di una struttura allocata staticamente, per questo sono state definite anche altre -due versioni rientranti (con la solita estensione \code{\_r}), che prevedono -un secondo argomento \code{struct tm *result}, fornito dal chiamante, che deve -preallocare la struttura su cui sarà restituita la conversione. +due versioni \index{funzioni!rientranti} rientranti (con la solita estensione +\code{\_r}), che prevedono un secondo argomento \code{struct tm *result}, +fornito dal chiamante, che deve preallocare la struttura su cui sarà +restituita la conversione. Come mostrato in fig.~\ref{fig:sys_tm_struct} il \textit{broken-down time} permette di tenere conto anche della differenza fra tempo universale e ora @@ -2425,7 +2434,7 @@ un errore nell'esecuzione di una funzione, ma di norma questo viene riportato semplicemente usando un opportuno valore di ritorno della funzione invocata. Inoltre il sistema di classificazione degli errori è basato sull'architettura a processi, e presenta una serie di problemi nel caso lo si debba usare con i -thread. +\itindex{thread} \textit{thread}. \subsection{La variabile \var{errno}} @@ -2443,10 +2452,11 @@ che c' Per riportare il tipo di errore il sistema usa la variabile globale \var{errno},\footnote{l'uso di una variabile globale può comportare alcuni - problemi (ad esempio nel caso dei thread) ma lo standard ISO C consente - 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 + problemi (ad esempio nel caso dei \itindex{thread} \textit{thread}) ma lo + standard ISO C consente 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 + \itindex{thread} \textit{thread}.} definita nell'header \file{errno.h}; la variabile è in genere definita come \direct{volatile} dato che può essere cambiata in modo asincrono da un segnale (si veda sez.~\ref{sec:sig_sigchld} per un esempio, ricordando quanto trattato in sez.~\ref{sec:proc_race_cond}), @@ -2506,13 +2516,14 @@ La funzione utilizza una stringa statica che non deve essere modificata dal programma; essa è utilizzabile solo fino ad una chiamata successiva a \func{strerror} o \func{perror}, nessun'altra funzione di libreria tocca questa stringa. In ogni caso l'uso di una stringa statica rende la funzione -non rientrante, per cui nel caso si usino i thread le librerie -forniscono\footnote{questa funzione è la versione prevista dalle \acr{glibc}, - ed effettivamente definita in \file{string.h}, ne esiste una analoga nello - standard SUSv3 (quella riportata dalla pagina di manuale), che restituisce - \code{int} al posto di \code{char *}, e che tronca la stringa restituita a - \param{size}.} una apposita versione rientrante \func{strerror\_r}, il cui -prototipo è: +non \index{funzioni!rientranti} rientrante, per cui nel caso si usino i +\itindex{thread} \textit{thread} le librerie forniscono\footnote{questa + funzione è la versione prevista dalle \acr{glibc}, ed effettivamente + definita in \file{string.h}, ne esiste una analoga nello standard SUSv3 + (quella riportata dalla pagina di manuale), che restituisce \code{int} al + posto di \code{char *}, e che tronca la stringa restituita a + \param{size}.} una apposita versione \index{funzioni!rientranti} rientrante +\func{strerror\_r}, il cui prototipo è: \begin{prototype}{string.h} {char * strerror\_r(int errnum, char *buf, size\_t size)} @@ -2532,9 +2543,10 @@ prototipo \noindent La funzione è analoga a \func{strerror} ma restituisce la stringa di errore -nel buffer \param{buf} che il singolo thread deve allocare autonomamente per -evitare i problemi connessi alla condivisione del buffer statico. Il messaggio -è copiato fino alla dimensione massima del buffer, specificata dall'argomento +nel buffer \param{buf} che il singolo \itindex{thread} \textit{thread} deve +allocare autonomamente per evitare i problemi connessi alla condivisione del +buffer statico. Il messaggio è copiato fino alla dimensione massima del +buffer, specificata dall'argomento \param{size}, che deve comprendere pure il carattere di terminazione; altrimenti la stringa viene troncata. @@ -2704,7 +2716,7 @@ che errori relativi alla stessa linea non vengano ripetuti. % LocalWords: strftime thread EOF modifiable lvalue app errcode strerror LC at % LocalWords: perror string errnum MESSAGES error message ErrCode strtol log % LocalWords: program invocation argv printf print progname exit count fname -% LocalWords: lineno one standardese Di page +% LocalWords: lineno one standardese Di page Wed Wednesday Apr April PM AM @@ -2712,3 +2724,4 @@ che errori relativi alla stessa linea non vengano ripetuti. %%% mode: latex %%% TeX-master: "gapil" %%% End: +% LocalWords: CEST