X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=60ca1e9bae873a10d505afdcd965e1ab3f638b37;hp=4d980b22464cad62524effaebccb781dc9bd7778;hb=b99370b46df36884995d94ed00de41aa51b4e027;hpb=cf60963212306540ce7485ed7c86405e143a3352 diff --git a/system.tex b/system.tex index 4d980b2..60ca1e9 100644 --- a/system.tex +++ b/system.tex @@ -1,6 +1,6 @@ %% system.tex %% -%% Copyright (C) 2000-2002 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2003 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 "Prefazione", @@ -1105,16 +1105,16 @@ da cui ci si collega, l'\acr{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}. -In questo modo il primo file viene utilizzato per registrare sta utilizzando -il sistema al momento corrente, mentre il secondo mantiene la registrazione -delle attività degli utenti. A quest'ultimo vengono anche aggiunte delle voci -speciali per tenere conto dei cambiamenti del sistema, come la modifica del -runlevel, il riavvio della macchina, ecc. Tutte queste informazioni sono -descritte in dettaglio nel manuale delle \acr{glibc}. +In questo modo il primo file viene utilizzato per registrare chi sta +utilizzando il sistema al momento corrente, mentre il secondo mantiene la +registrazione delle attività degli utenti. A quest'ultimo vengono anche +aggiunte delle voci speciali per tenere conto dei cambiamenti del sistema, +come la modifica del runlevel, il riavvio della macchina, ecc. Tutte queste +informazioni sono descritte in dettaglio nel manuale delle \acr{glibc}. Questi file non devono mai essere letti direttamente, ma le informazioni che contengono possono essere ricavate attraverso le opportune funzioni di -libreria. Queste sono analoghe alle precedenti (vedi +libreria. Queste sono analoghe alle precedenti funzioni (vedi \tabref{tab:sys_passwd_func}) usate per accedere al database degli utenti, solo che in questo caso la struttura del database di accounting è molto più complessa, dato che contiene diversi tipi di informazione. @@ -1219,7 +1219,7 @@ corrispondente al valore del campo \var{ut\_id} specificato in \param{ut}. \const{LOGIN\_PROCESS}& Identifica un processo di login. \\ \const{USER\_PROCESS} & Identifica un processo utente. \\ \const{DEAD\_PROCESS} & Identifica un processo terminato. \\ - \const{ACCOUNTING} & ??? \\ +% \const{ACCOUNTING} & ??? \\ \hline \end{tabular} \caption{Classificazione delle voci del database di accounting a seconda dei @@ -1271,9 +1271,6 @@ prototipi sono: \funcdecl{void logwtmp(const char *line, const char *name, const char *host)} Aggiunge nel database di accounting una voce con i valori specificati. - - \bodydesc{Le funzioni ritornano il puntatore ad una struttura \struct{utmp} - in caso di successo e \val{NULL} in caso di errore.} \end{functions} La prima funzione permette l'aggiunta di una voce a \file{wmtp} specificando @@ -1646,9 +1643,9 @@ dei tempi di esecuzione dei processi. Per ciascun processo il kernel calcola tre tempi diversi: \begin{description} \item[\textit{clock time}]: il tempo \textsl{reale} (viene chiamato anche - \textit{wall clock time}) passato dall'avvio del processo. Chiaramente tale - tempo dipende anche dal carico del sistema e da quanti altri processi - stavano girando nello stesso periodo. + \textit{wall clock time} o \textit{elapsed time}) passato dall'avvio del + processo. Chiaramente tale tempo dipende anche dal carico del sistema e da + quanti altri processi stavano girando nello stesso periodo. \item[\textit{user time}]: il tempo che la CPU ha impiegato nell'esecuzione delle istruzioni del processo in user space. \item[\textit{system time}]: il tempo che la CPU ha impiegato nel kernel per @@ -1891,15 +1888,15 @@ valore nullo serve per leggere i parametri correnti; i valori diversi da zero devono essere specificati come OR binario delle costanti riportate in \secref{tab:sys_timex_mode}. -La funzione utilizza il meccanismo di David L. Mills, descritto nell'RFC~1305, -che è alla base del protocollo NTP; la funzione è specifica di Linux e non -deve essere usata se la portabilità è un requisito, le \acr{glibc} provvedono -anche un suo omonimo \func{ntp\_adjtime}. La trattazione completa di questa -funzione necessita di una lettura approfondita del meccanismo descritto -nell'RFC~1305, ci limitiamo a descrivere in \tabref{tab:sys_timex_mode} i -principali valori utilizzabili per il campo \var{mode}, un elenco più -dettagliato del significato dei vari campi della struttura \struct{timex} può -essere ritrovato in \cite{glibc}. +La funzione utilizza il meccanismo di David L. Mills, descritto +nell'\href{http://www.ietf.org/rfc/rfc1305.txt}{RFC~1305}, che è alla base del +protocollo NTP. La funzione è specifica di Linux e non deve essere usata se la +portabilità è un requisito, le \acr{glibc} provvedono anche un suo omonimo +\func{ntp\_adjtime}. La trattazione completa di questa funzione necessita di +una lettura approfondita del meccanismo descritto nell'RFC~1305, ci limitiamo +a descrivere in \tabref{tab:sys_timex_mode} i principali valori utilizzabili +per il campo \var{mode}, un elenco più dettagliato del significato dei vari +campi della struttura \struct{timex} può essere ritrovato in \cite{glibc}. \begin{table}[htb] \footnotesize @@ -2254,46 +2251,56 @@ prima funzione che si pu Restituisce una stringa con il messaggio di errore relativo ad \param{errnum}. - \bodydesc{La funzione ritorna il puntatore alla stringa col messaggio di - errore in caso di successo e \val{NULL} in caso di errore, nel qual caso - \var{errno} assumerà il valore \errval{EINVAL} se si è specificato un - numero di errore non valido.} + \bodydesc{La funzione ritorna il puntatore ad una stringa di errore.} \end{prototype} -In generale \func{strerror} viene usata passando \var{errno} come parametro; -nel caso si specifichi un codice sbagliato verrà restituito un messaggio di -errore sconosciuto, e la funzione restituirà come errore \errcode{EINVAL}. La -funzione tiene conto del valore della variabile di ambiente -\val{LC\_MESSAGES} per usare eventuali traduzioni dei messaggi d'errore -nella localizzazione presente. + +La funzione ritorna il puntatore alla stringa contenente il messaggio di +errore corrispondente al valore di \param{errnum}, se questo non è un valore +valido verrà comunque restituita una stringa valida contenente un messaggio +che dice che l'errore è sconosciuto, e \var{errno} verrà modificata assumendo +il valore \errval{EINVAL}. + +In generale \func{strerror} viene usata passando \var{errno} come parametro, +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. La funzione utilizza una stringa statica che non deve essere modificata dal -programma e che è utilizzabile solo fino ad una chiamata successiva a -\func{strerror}; per questo motivo non è rientrante e nel caso si usino i -thread è provvista\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 versione apposita: +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 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 è: \begin{prototype}{string.h} {char * strerror\_r(int errnum, char *buf, size\_t size)} - Analoga a \func{strerror} ma usa il buffer \param{buf} di lunghezza massima - (compreso il terminatore) \param{size}. - - \bodydesc{La funzione restituisce il puntatore alla stringa; in caso di - errore \var{errno} oltre a \errval{EINVAL} può assumere anche il valore - \errval{ERANGE} per indicare che non c'è sufficiente memoria per contenere - la stringa di descrizione.} + Restituisce una stringa con il messaggio di errore relativo ad + \param{errnum}. + + \bodydesc{La funzione restituisce l'indirizzo del messaggio in caso di + successo e \val{NULL} in caso di errore; nel qual caso \var{errno} + assumerà i valori: + \begin{errlist} + \item[\errcode{EINVAL}] si è specificato un valore di \param{errnum} non + valido. + \item[\errcode{ERANGE}] la lunghezza di \param{buf} è insufficiente a + contenere la stringa di errore. + \end{errlist}} \end{prototype} \noindent -che utilizza un buffer che il singolo thread deve allocare, per evitare i -problemi connessi alla condivisione del buffer statico. La funzione -restituisce l'indirizzo della stringa usata, che può essere contenuta nel -buffer specificato da \param{buf}, per una lunghezza non superiore a -\param{size}, nel qual caso la stringa sarebbe troncata e terminata con uno -zero (il carattere NUL). +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 +\param{size}, che deve comprendere pure il carattere di terminazione; +altrimenti la stringa viene troncata. Una seconda funzione usata per riportare i codici di errore in maniera automatizzata sullo standard error (vedi \secref{sec:file_std_descr}) è @@ -2306,16 +2313,15 @@ automatizzata sullo standard error (vedi \secref{sec:file_std_descr}) I messaggi di errore stampati sono gli stessi di \func{strerror}, (riportati in \capref{cha:errors}), e, usando il valore corrente di \var{errno}, si riferiscono all'ultimo errore avvenuto. La stringa specificata con -\param{message} viene stampato prime del messaggio d'errore, seguita dai due +\param{message} viene stampato prima del messaggio d'errore, seguita dai due punti e da uno spazio, il messaggio è terminato con un a capo. -Il messaggio può essere riportato anche usando altre variabili globali -dichiarate in \file{errno.h}: -\includecodesnip{listati/errlist.c} -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}. +Il messaggio può essere riportato anche usando le due 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 +equivalente a quello di \func{strerror}. \begin{figure}[!htb] \footnotesize \centering @@ -2397,9 +2403,9 @@ il valore un'altra variabile globale, \var{error\_message\_count}, che tiene conto di quanti errori ci sono stati. -Un'altra funzione per la stampa degli errori, ancora più sofisticata, è -\funcd{error\_at\_line}, che prende due argomenti aggiuntivi per indicare -linea e file su cui è avvenuto l'errore; il suo prototipo è: +Un'altra funzione per la stampa degli errori, ancora più sofisticata, che +prende due argomenti aggiuntivi per indicare linea e file su cui è avvenuto +l'errore è \funcd{error\_at\_line}; il suo prototipo è: \begin{prototype}{stdio.h} {void error\_at\_line(int status, int errnum, const char *fname, unsigned int lineno, const char *format, ...)}