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
 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} 
   
 \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
 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} 
 \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.\\
     \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{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{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{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
     \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
 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
 
 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}
                               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
                               \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}
                               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
                               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
 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
 
 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
 
 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
 
 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
 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}}
 
 
 \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
 
 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}),
 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
 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)} 
   
 \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
 \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.
 
 \param{size}, che deve comprendere pure il carattere di terminazione;
 altrimenti la stringa viene troncata.