X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=8f074839df2b65ff3375a0343db6bac6d84e551c;hp=ff4033dcba52b0878bb368e9b0878f62215bf468;hb=dcf2c2df897955ff3503a7c426025457ab456fd7;hpb=94b4d603807121b40eef06d22d2b6cd6e06ec7fd diff --git a/system.tex b/system.tex index ff4033d..8f07483 100644 --- a/system.tex +++ b/system.tex @@ -1,6 +1,6 @@ %% system.tex %% -%% Copyright (C) 2000-2011 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2012 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", @@ -65,20 +65,20 @@ sono fissi in un'implementazione mentre possono variare in un altra. Tutto questo crea una ambiguità che non è sempre possibile risolvere in maniera chiara; in generale quello che succede è che quando i limiti del sistema sono fissi essi vengono definiti come macro di preprocessore nel file -\file{limits.h}, se invece possono variare, il loro valore sarà ottenibile +\headfile{limits.h}, se invece possono variare, il loro valore sarà ottenibile tramite la funzione \func{sysconf} (che esamineremo in sez.~\ref{sec:sys_sysconf}). Lo standard ANSI C definisce dei limiti che sono tutti fissi, pertanto questo saranno sempre disponibili al momento della compilazione. Un elenco, ripreso -da \file{limits.h}, è riportato in tab.~\ref{tab:sys_ansic_macro}. Come si può -vedere per la maggior parte questi limiti attengono alle dimensioni dei dati -interi, che sono in genere fissati dall'architettura hardware (le analoghe -informazioni per i dati in virgola mobile sono definite a parte, ed -accessibili includendo \file{float.h}). Lo standard prevede anche un'altra +da \headfile{limits.h}, è riportato in tab.~\ref{tab:sys_ansic_macro}. Come si +può vedere per la maggior parte questi limiti attengono alle dimensioni dei +dati interi, che sono in genere fissati dall'architettura hardware (le +analoghe informazioni per i dati in virgola mobile sono definite a parte, ed +accessibili includendo \headfile{float.h}). Lo standard prevede anche un'altra costante, \const{FOPEN\_MAX}, che può non essere fissa e che pertanto non è -definita in \file{limits.h}; essa deve essere definita in \file{stdio.h} ed -avere un valore minimo di 8. +definita in \headfile{limits.h}; essa deve essere definita in +\headfile{stdio.h} ed avere un valore minimo di 8. \begin{table}[htb] \centering @@ -107,7 +107,7 @@ avere un valore minimo di 8. \const{ULONG\_MAX}& 4294967295 & Massimo di \ctyp{unsigned long}.\\ \hline \end{tabular} - \caption{Costanti definite in \file{limits.h} in conformità allo standard + \caption{Costanti definite in \headfile{limits.h} in conformità allo standard ANSI C.} \label{tab:sys_ansic_macro} \end{table} @@ -136,7 +136,7 @@ tab.~\ref{tab:sys_isoc90_macro}. Massimo di \ctyp{unsigned long long}.\\ \hline \end{tabular} - \caption{Macro definite in \file{limits.h} in conformità allo standard + \caption{Macro definite in \headfile{limits.h} in conformità allo standard ISO C90.} \label{tab:sys_isoc90_macro} \end{table} @@ -184,13 +184,14 @@ file, riportate in tab.~\ref{tab:sys_file_macro}). \label{tab:sys_generic_macro} \end{table} -Lo standard dice che queste macro devono essere definite in \file{limits.h} -quando i valori a cui fanno riferimento sono fissi, e altrimenti devono essere -lasciate indefinite, ed i loro valori dei limiti devono essere accessibili -solo attraverso \func{sysconf}. In realtà queste vengono sempre definite ad -un valore generico. Si tenga presente poi che alcuni di questi limiti possono -assumere valori molto elevati (come \const{CHILD\_MAX}), e non è pertanto il -caso di utilizzarli per allocare staticamente della memoria. +Lo standard dice che queste macro devono essere definite in +\headfile{limits.h} quando i valori a cui fanno riferimento sono fissi, e +altrimenti devono essere lasciate indefinite, ed i loro valori dei limiti +devono essere accessibili solo attraverso \func{sysconf}. In realtà queste +vengono sempre definite ad un valore generico. Si tenga presente poi che +alcuni di questi limiti possono assumere valori molto elevati (come +\const{CHILD\_MAX}), e non è pertanto il caso di utilizzarli per allocare +staticamente della memoria. A complicare la faccenda si aggiunge il fatto che POSIX.1 prevede una serie di altre costanti (il cui nome inizia sempre con \code{\_POSIX\_}) che @@ -260,8 +261,8 @@ valori ottenuti da \func{sysconf}. 199009L).\\ \hline \end{tabular} - \caption{Alcune macro definite in \file{limits.h} in conformità allo standard - POSIX.1.} + \caption{Alcune macro definite in \headfile{limits.h} in conformità allo + standard POSIX.1.} \label{tab:sys_posix1_other} \end{table} @@ -269,7 +270,7 @@ Oltre ai precedenti valori (e a quelli relativi ai file elencati in tab.~\ref{tab:sys_posix1_file}), che devono essere obbligatoriamente definiti, lo standard POSIX.1 ne prevede parecchi altri. La lista completa si trova dall'header file \file{bits/posix1\_lim.h} (da non usare mai direttamente, è -incluso automaticamente all'interno di \file{limits.h}). Di questi vale la +incluso automaticamente all'interno di \headfile{limits.h}). Di questi vale la pena menzionare alcune macro di uso comune, (riportate in tab.~\ref{tab:sys_posix1_other}), che non indicano un valore specifico, ma denotano la presenza di alcune funzionalità nel sistema (come il supporto del @@ -402,8 +403,7 @@ riportate in tab.~\ref{tab:sys_file_macro}. \hline \const{LINK\_MAX} &8 & Numero massimo di link a un file.\\ \const{NAME\_MAX}& 14 & Lunghezza in byte di un nome di file. \\ - \const{PATH\_MAX}& 256 & Lunghezza in byte di un - \itindex{pathname} \textit{pathname}.\\ + \const{PATH\_MAX}& 256 & Lunghezza in byte di un \textit{pathname}.\\ \const{PIPE\_BUF}&4096 & Byte scrivibili atomicamente in una pipe (vedi sez.~\ref{sec:ipc_pipes}).\\ \const{MAX\_CANON}&255 & Dimensione di una riga di terminale in modo @@ -434,7 +434,7 @@ le analoghe di tab.~\ref{tab:sys_posix1_general}. \const{\_POSIX\_LINK\_MAX} &8 & Numero massimo di link a un file.\\ \const{\_POSIX\_NAME\_MAX}& 14 & Lunghezza in byte di un nome di file.\\ \const{\_POSIX\_PATH\_MAX}& 256 & Lunghezza in byte di un - \itindex{pathname} \textit{pathname}.\\ + \textit{pathname}.\\ \const{\_POSIX\_PIPE\_BUF}& 512 & Byte scrivibili atomicamente in una pipe.\\ \const{\_POSIX\_MAX\_CANON}&255 & Dimensione di una riga di @@ -452,9 +452,9 @@ le analoghe di tab.~\ref{tab:sys_posix1_general}. \label{tab:sys_posix1_file} \end{table} -Tutti questi limiti sono definiti in \file{limits.h}; come nel caso precedente -il loro uso è di scarsa utilità in quanto ampiamente superati in tutte le -implementazioni moderne. +Tutti questi limiti sono definiti in \headfile{limits.h}; come nel caso +precedente il loro uso è di scarsa utilità in quanto ampiamente superati in +tutte le implementazioni moderne. \subsection{La funzione \func{pathconf}} @@ -477,13 +477,13 @@ E si noti come la funzione in questo caso richieda un argomento che specifichi a quale file si fa riferimento, dato che il valore del limite cercato può variare a seconda del filesystem. Una seconda versione della funzione, \funcd{fpathconf}, opera su un file descriptor invece che su un -\itindex{pathname} \textit{pathname}. Il suo prototipo è: +\textit{pathname}. Il suo prototipo è: \begin{prototype}{unistd.h}{long fpathconf(int fd, int name)} Restituisce il valore del parametro \param{name} per il file \param{fd}. \bodydesc{È identica a \func{pathconf} solo che utilizza un file descriptor - invece di un \itindex{pathname} \textit{pathname}; pertanto gli errori - restituiti cambiano di conseguenza.} + invece di un \textit{pathname}; pertanto gli errori restituiti cambiano di + conseguenza.} \end{prototype} \noindent ed il suo comportamento è identico a quello di \func{pathconf}. @@ -503,7 +503,7 @@ il suo prototipo è: La funzione, che viene usata dal comando \cmd{uname}, restituisce le informazioni richieste nella struttura \param{info}; anche questa struttura è -definita in \file{sys/utsname.h}, secondo quanto mostrato in +definita in \headfile{sys/utsname.h}, secondo quanto mostrato in fig.~\ref{fig:sys_utsname}, e le informazioni memorizzate nei suoi membri indicano rispettivamente: \begin{itemize*} @@ -597,13 +597,13 @@ Legge o scrive uno dei parametri di sistema. I parametri a cui la funzione permettere di accedere sono organizzati in maniera gerarchica all'interno di un albero;\footnote{si tenga presente che - includendo solo \file{unistd.h}, saranno definiti solo i parametri generici; - dato che ce ne sono molti specifici dell'implementazione, nel caso di Linux - occorrerà includere anche i file \file{linux/unistd.h} e + includendo solo \headfile{unistd.h}, saranno definiti solo i parametri + generici; dato che ce ne sono molti specifici dell'implementazione, nel caso + di Linux occorrerà includere anche i file \file{linux/unistd.h} e \file{linux/sysctl.h}.} per accedere ad uno di essi occorre specificare un cammino attraverso i vari nodi dell'albero, in maniera analoga a come avviene -per la risoluzione di un \itindex{pathname} \textit{pathname} (da cui l'uso -alternativo del filesystem \file{/proc}, che vedremo dopo). +per la risoluzione di un \textit{pathname} (da cui l'uso alternativo del +filesystem \file{/proc}, che vedremo dopo). Ciascun nodo dell'albero è identificato da un valore intero, ed il cammino che arriva ad identificare un parametro specifico è passato alla funzione @@ -623,8 +623,8 @@ Si può effettuare anche una lettura e scrittura simultanea, nel qual caso il valore letto restituito dalla funzione è quello precedente alla scrittura. I parametri accessibili attraverso questa funzione sono moltissimi, e possono -essere trovati in \file{sysctl.h}, essi inoltre dipendono anche dallo stato -corrente del kernel (ad esempio dai moduli che sono stati caricati nel +essere trovati in \headfile{sysctl.h}, essi inoltre dipendono anche dallo +stato corrente del kernel (ad esempio dai moduli che sono stati caricati nel sistema) e in genere i loro nomi possono variare da una versione di kernel all'altra; per questo è sempre il caso di evitare l'uso di \func{sysctl} quando esistono modalità alternative per ottenere le stesse informazioni. @@ -646,9 +646,9 @@ forma di file alcune delle strutture interne del kernel stesso. In particolare l'albero dei valori di \func{sysctl} viene presentato in forma di file nella directory \file{/proc/sys}, cosicché è possibile accedervi -specificando un \itindex{pathname} \textit{pathname} e leggendo e scrivendo sul -file corrispondente al parametro scelto. Il kernel si occupa di generare al -volo il contenuto ed i nomi dei file corrispondenti, e questo ha il grande +specificando un \textit{pathname} e leggendo e scrivendo sul file +corrispondente al parametro scelto. Il kernel si occupa di generare al volo +il contenuto ed i nomi dei file corrispondenti, e questo ha il grande vantaggio di rendere accessibili i vari parametri a qualunque comando di shell e di permettere la navigazione dell'albero dei valori. @@ -692,7 +692,7 @@ ed \conffile{/etc/group},\footnote{in realtà oltre a questi nelle \conffile{/etc/gshadow}, in cui sono state spostate le informazioni di autenticazione (ed inserite alcune estensioni) per toglierle dagli altri file che devono poter essere letti per poter effettuare l'associazione fra - username e \acr{uid}.} il cui formato è descritto dalle relative pagine del + username e \ids{UID}.} il cui formato è descritto dalle relative pagine del manuale\footnote{nella quinta sezione, quella dei file di configurazione, occorre cioè usare \cmd{man 5 passwd} dato che altrimenti si avrebbe la pagina di manuale del comando \cmd{passwd}.} e tutte le funzioni che @@ -716,9 +716,10 @@ dall'altra con il diffondersi delle reti la necessità di centralizzare le informazioni degli utenti e dei gruppi per insiemi di macchine, in modo da mantenere coerenti i dati, ha portato anche alla necessità di poter recuperare e memorizzare dette informazioni su supporti diversi, introducendo il sistema -del \itindex{Name~Service~Switch} \textit{Name Service Switch} che tratteremo -brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la maggior -parte delle sua applicazioni sono relative alla risoluzioni di nomi di rete. +del \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} che +tratteremo brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la +maggior parte delle sua applicazioni sono relative alla risoluzioni di nomi di +rete. In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche per la lettura delle informazioni relative a utenti e gruppi tralasciando @@ -729,7 +730,7 @@ completamente quelle relative all'autenticazione. % \acr{glibc} per modularizzare l'accesso a tutti i servizi in cui sia % necessario trovare una corrispondenza fra un nome ed un numero (od altra % informazione) ad esso associato, come appunto, quella fra uno username ed un -% \acr{uid} o fra un \acr{gid} ed il nome del gruppo corrispondente. +% \ids{UID} o fra un \ids{GID} ed il nome del gruppo corrispondente. Le prime funzioni che vedremo sono quelle previste dallo standard POSIX.1; queste sono del tutto generiche e si appoggiano direttamente al \textit{Name Service Switch}, per cui sono in grado di ricevere informazioni qualunque @@ -752,11 +753,11 @@ relative ad un utente si possono usare due funzioni, \funcd{getpwuid} e Le due funzioni forniscono le informazioni memorizzate nel registro degli utenti (che nelle versioni più recenti possono essere ottenute attraverso PAM) -relative all'utente specificato attraverso il suo \acr{uid} o il nome di +relative all'utente specificato attraverso il suo \ids{UID} o il nome di login. Entrambe le funzioni restituiscono un puntatore ad una struttura di -tipo \struct{passwd} la cui definizione (anch'essa eseguita in \file{pwd.h}) è -riportata in fig.~\ref{fig:sys_passwd_struct}, dove è pure brevemente -illustrato il significato dei vari campi. +tipo \struct{passwd} la cui definizione (anch'essa eseguita in +\headfile{pwd.h}) è riportata in fig.~\ref{fig:sys_passwd_struct}, dove è pure +brevemente illustrato il significato dei vari campi. \begin{figure}[!htb] \footnotesize @@ -850,15 +851,16 @@ fig.~\ref{fig:sys_group_struct}. Le funzioni viste finora sono in grado di leggere le informazioni sia direttamente dal file delle password in \conffile{/etc/passwd} che tramite il -sistema del \itindex{Name~Service~Switch} \textit{Name Service Switch} e sono -completamente generiche. Si noti però che non c'è una funzione che permetta di -impostare direttamente una password.\footnote{in realtà questo può essere - fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che POSIX non -prevede questa possibilità esiste un'altra interfaccia che lo fa, derivata da -SVID le cui funzioni sono riportate in tab.~\ref{tab:sys_passwd_func}. Questa -però funziona soltanto quando le informazioni sono mantenute su un apposito -file di \textsl{registro} di utenti e gruppi, con il formato classico di -\conffile{/etc/passwd} e \conffile{/etc/group}. +sistema del \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} e +sono completamente generiche. Si noti però che non c'è una funzione che +permetta di impostare direttamente una password.\footnote{in realtà questo può + essere fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che +POSIX non prevede questa possibilità esiste un'altra interfaccia che lo fa, +derivata da SVID le cui funzioni sono riportate in +tab.~\ref{tab:sys_passwd_func}. Questa però funziona soltanto quando le +informazioni sono mantenute su un apposito file di \textsl{registro} di utenti +e gruppi, con il formato classico di \conffile{/etc/passwd} e +\conffile{/etc/group}. \begin{table}[htb] \footnotesize @@ -868,27 +870,27 @@ file di \textsl{registro} di utenti e gruppi, con il formato classico di \textbf{Funzione} & \textbf{Significato}\\ \hline \hline - \func{fgetpwent} & Legge una voce dal file di registro degli utenti + \funcm{fgetpwent} & Legge una voce dal file di registro degli utenti + specificato.\\ + \funcm{fgetpwent\_r}& Come la precedente, ma \index{funzioni!rientranti} + rientrante.\\ + \funcm{putpwent} & Immette una voce in un file di registro degli + utenti.\\ + \funcm{getpwent} & Legge una voce da \conffile{/etc/passwd}.\\ + \funcm{getpwent\_r} & Come la precedente, ma \index{funzioni!rientranti} + rientrante.\\ + \funcm{setpwent} & Ritorna all'inizio di \conffile{/etc/passwd}.\\ + \funcm{endpwent} & Chiude \conffile{/etc/passwd}.\\ + \funcm{fgetgrent} & Legge una voce dal file di registro dei gruppi specificato.\\ - \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 \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 \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 \index{funzioni!rientranti} - rientrante.\\ - \func{setgrent} & Ritorna all'inizio di \conffile{/etc/group}.\\ - \func{endgrent} & Chiude \conffile{/etc/group}.\\ + \funcm{fgetgrent\_r}& Come la precedente, ma \index{funzioni!rientranti} + rientrante.\\ + \funcm{putgrent} & Immette una voce in un file di registro dei gruppi.\\ + \funcm{getgrent} & Legge una voce da \conffile{/etc/group}.\\ + \funcm{getgrent\_r} & Come la precedente, ma \index{funzioni!rientranti} + rientrante.\\ + \funcm{setgrent} & Ritorna all'inizio di \conffile{/etc/group}.\\ + \funcm{endgrent} & Chiude \conffile{/etc/group}.\\ \hline \end{tabular} \caption{Funzioni per la manipolazione dei campi di un file usato come @@ -897,6 +899,8 @@ file di \textsl{registro} di utenti e gruppi, con il formato classico di \label{tab:sys_passwd_func} \end{table} +% TODO mancano i prototipi di alcune delle funzioni + Dato che oramai la gran parte delle distribuzioni di GNU/Linux utilizzano almeno le \textit{shadow password} (quindi con delle modifiche rispetto al formato classico del file \conffile{/etc/passwd}), si tenga presente che le @@ -932,7 +936,7 @@ I dati vengono usualmente\footnote{questa è la locazione specificata dal \file{/var/log/btmp} dove invece vengono memorizzati dal programma di login tutti tentativi di accesso fallito.} Quando un utente si collega viene aggiunta una voce a \file{/var/run/utmp} in cui viene memorizzato il nome di -login, il terminale da cui ci si collega, l'\acr{uid} della shell di login, +login, il terminale da cui ci si collega, l'\ids{UID} della shell di login, l'orario della connessione ed altre informazioni. La voce resta nel file fino al logout, quando viene cancellata e spostata in \file{/var/log/wtmp}. @@ -973,10 +977,10 @@ un nome di file sbagliato con \func{utmpname}). Nel caso non si sia utilizzata \func{utmpname} per specificare un file di registro alternativo, sia \func{setutent} che \func{endutent} operano usando -il default che è \file{/var/run/utmp}. Il nome di questo file, così come una -serie di altri valori di default per i \textit{pathname} di uso più comune, -viene mantenuto nei valori di una serie di costanti definite includendo -\file{paths.h}, in particolare quelle che ci interessano sono: +il default che è \sysfile{/var/run/utmp}. Il nome di questo file, così come +una serie di altri valori di default per i \textit{pathname} di uso più +comune, viene mantenuto nei valori di una serie di costanti definite +includendo \headfile{paths.h}, in particolare quelle che ci interessano sono: \begin{basedescript}{\desclabelwidth{2.0cm}} \item[\const{\_PATH\_UTMP}] specifica il file che contiene il registro per gli utenti correntemente collegati; questo è il valore che viene usato se non si @@ -985,7 +989,7 @@ viene mantenuto nei valori di una serie di costanti definite includendo l'archivio storico degli utenti collegati. \end{basedescript} che nel caso di Linux hanno un valore corrispondente ai file -\file{/var/run/utmp} e \file{/var/log/wtmp} citati in precedenza. +\sysfile{/var/run/utmp} e \sysfile{/var/log/wtmp} citati in precedenza. Una volta aperto il file del registro degli utenti si può eseguire una scansione leggendo o scrivendo una voce con le funzioni \funcd{getutent}, @@ -1083,15 +1087,17 @@ sono un sovrainsieme di \code{utmp}. Le \acr{glibc} utilizzano già una versione estesa di \code{utmp}, che rende inutili queste nuove strutture; pertanto esse e le relative funzioni di -gestione (\func{getutxent}, \func{getutxid}, \func{getutxline}, -\func{pututxline}, \func{setutxent} e \func{endutxent}) sono ridefinite come +gestione (\funcm{getutxent}, \funcm{getutxid}, \funcm{getutxline}, +\funcm{pututxline}, \funcm{setutxent} e \funcm{endutxent}) sono ridefinite come sinonimi delle funzioni appena viste. +% TODO (verificare le funzioni di cui sopra ) + Come visto in sez.~\ref{sec:sys_user_group}, l'uso di strutture allocate 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 +\index{funzioni!rientranti} rientranti: \funcm{getutent\_r}, \funcm{getutid\_r}, +\funcm{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 @@ -1136,7 +1142,7 @@ utilizzo. Come abbiamo accennato in sez.~\ref{sec:proc_wait} le informazioni riguardo l'utilizzo delle risorse da parte di un processo è mantenuto in una struttura di tipo \struct{rusage}, la cui definizione (che si trova in -\file{sys/resource.h}) è riportata in fig.~\ref{fig:sys_rusage_struct}. +\headfile{sys/resource.h}) è riportata in fig.~\ref{fig:sys_rusage_struct}. \begin{figure}[!htb] \footnotesize @@ -1221,6 +1227,8 @@ essere aumentato dal processo stesso durante l'esecuzione, ciò può però esser fatto solo fino al valore del secondo, che per questo viene detto \textit{hard limit}. +%TODO: tabella troppo grossa, trasformare in lista + \begin{table}[htb] \footnotesize \centering @@ -1311,11 +1319,20 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard esegue operazioni che estendano lo \textit{stack} oltre questa dimensione riceverà un segnale di \signal{SIGSEGV}.\\ +% TODO dal 2.6.23 il significato è cambiato, vedi anche man execve \const{RLIMIT\_RSS} & L'ammontare massimo di pagine di memoria dato al \index{segmento!testo} testo del processo. Il limite è solo una indicazione per il kernel, qualora ci fosse un surplus di memoria questa verrebbe assegnata.\\ +% TODO: aggiungere a \const{RLIMIT\_STACK} i dati di execve: +% Questi fino al kernel 2.6.23 erano fissi e costituiti da +% 32 pagine di memoria (corrispondenti per la gran parte delle architetture a +% 128kb di dati). Dal 2.6.23 su molte architettire il limite viene stabilito in +% base al valore della risorsa \const{RLIMIT\_STACK} (vedi +% sez.~\ref{sec:sys_resource_limit}), ad un quarto dello spazio da essa +% indicato). Dal 2.6.25 viene comunque garantito uno spazio base di 32 pagine. + % TODO integrare con la roba di madvise % TODO integrare con le ultime aggiunte, vedi pagina di manuale \hline @@ -1523,12 +1540,12 @@ prototipo è: \bodydesc{La funzione ritorna 0 in caso di successo o $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EACCESS}] non si hanno i permessi per accedere a + \item[\errcode{EACCES}] non si hanno i permessi per accedere a \param{pathname}. \item[\errcode{EPERM}] il processo non ha privilegi sufficienti ad abilitare il \textit{BSD accounting}. \item[\errcode{ENOSYS}] il kernel non supporta il \textit{BSD accounting}. - \item[\errcode{EUSER}] non sono disponibili nel kernel strutture per il + \item[\errcode{EUSERS}] non sono disponibili nel kernel strutture per il file o si è finita la memoria. \end{errlist} ed inoltre \errval{EFAULT}, \errval{EIO}, \errval{ELOOP}, @@ -1536,10 +1553,10 @@ prototipo è: \errval{ENOTDIR}, \errval{EROFS}.} \end{prototype} -La funzione attiva il salvataggio dei dati sul file indicato dal pathname -contenuti nella stringa puntata da \param{filename}; la funzione richiede che -il processo abbia i privilegi di amministratore (è necessaria la -\itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi +La funzione attiva il salvataggio dei dati sul file indicato dal +\textit{pathname} contenuti nella stringa puntata da \param{filename}; la +funzione richiede che il processo abbia i privilegi di amministratore (è +necessaria la \itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \val{NULL} per \param{filename} il \textit{BSD accounting} viene invece disabilitato. Un semplice esempio per l'uso di questa funzione è riportato nel programma @@ -1602,7 +1619,7 @@ rispettivamente chiamati \itindex{calendar~time} \textit{calendar time} e \type{clock\_t}, che ha quindi una risoluzione del microsecondo. Il numero di \itindex{clock~tick} \textit{tick} al secondo può essere ricavato anche attraverso \func{sysconf} (vedi sez.~\ref{sec:sys_sysconf}). Il vecchio - simbolo \const{CLK\_TCK} definito in \file{time.h} è ormai considerato + simbolo \const{CLK\_TCK} definito in \headfile{time.h} è ormai considerato obsoleto. \end{basedescript} @@ -1870,9 +1887,9 @@ prototipo è: \end{prototype} La funzione richiede una struttura di tipo \struct{timex}, la cui definizione, -così come effettuata in \file{sys/timex.h}, è riportata in -fig.~\ref{fig:sys_timex_struct}. L'azione della funzione dipende dal valore del -campo \var{mode}, che specifica quale parametro dell'orologio di sistema, +così come effettuata in \headfile{sys/timex.h}, è riportata in +fig.~\ref{fig:sys_timex_struct}. L'azione della funzione dipende dal valore +del campo \var{mode}, che specifica quale parametro dell'orologio di sistema, specificato in un opportuno campo di \struct{timex}, deve essere impostato. Un valore nullo serve per leggere i parametri correnti; i valori diversi da zero devono essere specificati come OR binario delle costanti riportate in @@ -2069,9 +2086,9 @@ permette di tenere conto anche della differenza fra tempo universale e ora locale, compresa l'eventuale ora legale. Questo viene fatto attraverso le tre \index{variabili!globali} variabili globali mostrate in fig.~\ref{fig:sys_tzname}, cui si accede quando si include -\file{time.h}. Queste variabili vengono impostate quando si chiama una delle -precedenti funzioni di conversione, oppure invocando direttamente la funzione -\funcd{tzset}, il cui prototipo è: +\headfile{time.h}. Queste variabili vengono impostate quando si chiama una +delle precedenti funzioni di conversione, oppure invocando direttamente la +funzione \funcd{tzset}, il cui prototipo è: \begin{prototype}{sys/timex.h} {void tzset(void)} @@ -2080,9 +2097,9 @@ precedenti funzioni di conversione, oppure invocando direttamente la funzione \bodydesc{La funzione non ritorna niente e non dà errori.} \end{prototype} -La funzione inizializza le variabili di fig.~\ref{fig:sys_tzname} a partire dal -valore della variabile di ambiente \const{TZ}, se quest'ultima non è definita -verrà usato il file \conffile{/etc/localtime}. +La funzione inizializza le variabili di fig.~\ref{fig:sys_tzname} a partire +dal valore della variabile di ambiente \envvar{TZ}, se quest'ultima non è +definita verrà usato il file \conffile{/etc/localtime}. \begin{figure}[!htb] \footnotesize @@ -2213,8 +2230,8 @@ variabile globale \var{errno},\footnote{l'uso di una variabile globale può \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 + \itindex{thread} \textit{thread}.} definita nell'header \headfile{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}), ma dato che un gestore di segnale scritto bene salva e ripristina il valore @@ -2222,12 +2239,12 @@ della variabile, di questo non è necessario preoccuparsi nella programmazione normale. I valori che può assumere \var{errno} sono riportati in app.~\ref{cha:errors}, -nell'header \file{errno.h} sono anche definiti i nomi simbolici per le +nell'header \headfile{errno.h} sono anche definiti i nomi simbolici per le costanti numeriche che identificano i vari errori; essi iniziano tutti per -\val{E} e si possono considerare come nomi riservati. In seguito faremo -sempre riferimento a tali valori, quando descriveremo i possibili errori -restituiti dalle funzioni. Il programma di esempio \cmd{errcode} stampa il -codice relativo ad un valore numerico con l'opzione \cmd{-l}. +\val{E} e si possono considerare come nomi riservati. In seguito faremo sempre +riferimento a tali valori, quando descriveremo i possibili errori restituiti +dalle funzioni. Il programma di esempio \cmd{errcode} stampa il codice +relativo ad un valore numerico con l'opzione \cmd{-l}. Il valore di \var{errno} viene sempre impostato a zero all'avvio di un programma, gran parte delle funzioni di libreria impostano \var{errno} ad un @@ -2266,8 +2283,8 @@ il valore \errval{EINVAL}. In generale \func{strerror} viene usata passando \var{errno} come argomento, ed il valore di quest'ultima non verrà modificato. La funzione inoltre tiene -conto del valore della variabile di ambiente \val{LC\_MESSAGES} per usare le -appropriate traduzioni dei messaggi d'errore nella localizzazione presente. +conto del valore della variabile di ambiente \envvar{LC\_MESSAGES} per usare +le appropriate traduzioni dei messaggi d'errore nella localizzazione presente. La funzione utilizza una stringa statica che non deve essere modificata dal programma; essa è utilizzabile solo fino ad una chiamata successiva a @@ -2276,11 +2293,11 @@ questa stringa. In ogni caso l'uso di una stringa statica rende la funzione 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 + definita in \headfile{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 è: +\funcd{strerror\_r}, il cui prototipo è: \begin{prototype}{string.h} {char * strerror\_r(int errnum, char *buf, size\_t size)} @@ -2324,9 +2341,9 @@ punti e da uno spazio, il messaggio è terminato con un a capo. Il messaggio può essere riportato anche usando le due \index{variabili!globali} variabili globali: \includecodesnip{listati/errlist.c} -dichiarate in \file{errno.h}. La prima contiene i puntatori alle stringhe di -errore indicizzati da \var{errno}; la seconda esprime il valore più alto per -un codice di errore, l'utilizzo di questa stringa è sostanzialmente +dichiarate in \headfile{errno.h}. La prima contiene i puntatori alle stringhe +di errore indicizzati da \var{errno}; la seconda esprime il valore più alto +per un codice di errore, l'utilizzo di questa stringa è sostanzialmente equivalente a quello di \func{strerror}. \begin{figure}[!htbp] @@ -2346,7 +2363,7 @@ completo del programma è allegato nel file \file{ErrCode.c} e contiene pure la gestione delle opzioni e tutte le definizioni necessarie ad associare il valore numerico alla costante simbolica. In particolare si è riportata la sezione che converte la stringa passata come argomento in un intero -(\texttt{\small 1--2}), controllando con i valori di ritorno di \func{strtol} +(\texttt{\small 1--2}), controllando con i valori di ritorno di \funcm{strtol} che la conversione sia avvenuta correttamente (\texttt{\small 4--10}), e poi stampa, a seconda dell'opzione scelta il messaggio di errore (\texttt{\small 11--14}) o la macro (\texttt{\small 15--17}) associate a quel codice. @@ -2435,15 +2452,15 @@ linea non vengano ripetuti. % LocalWords: SHRT short USHRT int UINT LONG long ULONG LLONG ULLONG POSIX ARG % LocalWords: Stevens exec CHILD STREAM stream TZNAME timezone NGROUPS SSIZE % LocalWords: ssize LISTIO JOB CONTROL job control IDS VERSION YYYYMML bits bc -% LocalWords: dall'header posix lim nell'header glibc run unistd name errno SC +% LocalWords: dall'header posix lim nell'header glibc run unistd name errno % LocalWords: NGROUP CLK TCK clock tick process PATH pathname BUF CANON path % LocalWords: pathconf fpathconf descriptor fd uname sys struct utsname info % LocalWords: EFAULT fig SOURCE NUL LENGTH DOMAIN NMLN UTSLEN system call proc % LocalWords: domainname sysctl BSD nlen void oldval size oldlenp newval EPERM -% LocalWords: newlen ENOTDIR EINVAL ENOMEM linux l'array oldvalue paging stack +% LocalWords: newlen ENOTDIR EINVAL ENOMEM linux array oldvalue paging stack % LocalWords: TCP shell Documentation ostype hostname osrelease version mount % LocalWords: const source filesystemtype mountflags ENODEV ENOTBLK block read -% LocalWords: device EBUSY only superblock point EACCES NODEV ENXIO major xC +% LocalWords: device EBUSY only EACCES NODEV ENXIO major % LocalWords: number EMFILE dummy ENAMETOOLONG ENOENT ELOOP virtual devfs MGC % LocalWords: magic MSK RDONLY NOSUID suid sgid NOEXEC SYNCHRONOUS REMOUNT MNT % LocalWords: MANDLOCK mandatory locking WRITE APPEND append IMMUTABLE NOATIME @@ -2458,17 +2475,17 @@ linea non vengano ripetuti. % LocalWords: line libc XPG utmpx getutxent getutxid getutxline pututxline who % LocalWords: setutxent endutxent wmtp updwtmp logwtmp wtmp host rusage utime % LocalWords: minflt majflt nswap fault swap timeval wait getrusage usage SELF -% LocalWords: CHILDREN current limit soft RLIMIT Address brk mremap mmap dump +% LocalWords: CHILDREN current limit soft RLIMIT address brk mremap mmap dump % LocalWords: SIGSEGV SIGXCPU SIGKILL sbrk FSIZE SIGXFSZ EFBIG LOCKS lock dup % LocalWords: MEMLOCK NOFILE NPROC fork EAGAIN SIGPENDING sigqueue kill RSS tv % LocalWords: resource getrlimit setrlimit rlimit rlim INFINITY capabilities % LocalWords: capability CAP l'I Sun Sparc PAGESIZE getpagesize SVr SUSv get % LocalWords: phys pages avphys NPROCESSORS CONF ONLN getloadavg stdlib double -% LocalWords: loadavg nelem scheduler CONFIG ACCT acct filename EACCESS EUSER +% LocalWords: loadavg nelem scheduler CONFIG ACCT acct filename EUSER % LocalWords: ENFILE EROFS PACCT AcctCtrl cap calendar UTC Jan the Epoch GMT % LocalWords: Greenwich Mean l'UTC timer CLOCKS SEC cron wall elapsed times tz -% LocalWords: tms dell' cutime cstime waitpid gettimeofday settimeofday timex -% LocalWords: timespec adjtime olddelta adjtimex David Mills nell' RFC NTP ntp +% LocalWords: tms cutime cstime waitpid gettimeofday settimeofday timex +% LocalWords: timespec adjtime olddelta adjtimex David Mills RFC NTP ntp % LocalWords: nell'RFC ADJ FREQUENCY frequency MAXERROR maxerror ESTERROR PLL % LocalWords: esterror TIMECONST constant SINGLESHOT MOD INS insert leap OOP % LocalWords: second delete progress has occurred BAD broken tm gmtoff asctime