X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=77a866afcea69c5179a3d7a709eee9190d389f8f;hp=1b4a1b0bea65124db1980343759bbaa7bbb6b8e0;hb=ffb12837c5ed8ccc095bc9c88349cd19b5e6b472;hpb=a896c0a874a06d086369f5cc3c7e6cf347671835 diff --git a/system.tex b/system.tex index 1b4a1b0..77a866a 100644 --- a/system.tex +++ b/system.tex @@ -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 @@ -452,9 +453,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}} @@ -503,7 +504,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,9 +598,9 @@ 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 @@ -623,8 +624,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. @@ -754,9 +755,9 @@ 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 \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 @@ -973,10 +974,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 +986,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}, @@ -1136,7 +1137,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 @@ -1534,12 +1535,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}, @@ -1613,7 +1614,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} @@ -1881,9 +1882,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 @@ -2080,9 +2081,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)} @@ -2091,9 +2092,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 @@ -2224,8 +2225,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 @@ -2233,12 +2234,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 @@ -2277,8 +2278,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 @@ -2287,7 +2288,7 @@ 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 @@ -2335,9 +2336,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] @@ -2446,15 +2447,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 @@ -2469,17 +2470,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