Alcune indicizzazioni ulteriori, trattata _FORTIFY_SOURCE e messi
[gapil.git] / system.tex
index 41f43d92431cfd774b59c543e3c387b9905339d6..797f953cc9b1165a6bedc7c5a60c5bbd8a664000 100644 (file)
@@ -1020,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} 
   
@@ -1053,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} 
@@ -1116,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
@@ -1330,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
@@ -1477,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
@@ -1539,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
@@ -2283,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
@@ -2297,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
@@ -2427,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}}
@@ -2445,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}),
@@ -2508,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)} 
   
@@ -2534,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.