X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=a8852c09dc4ed08bebf2226f4eb9588fbf07fb47;hp=c68686fcc5d9cfdd3d4e517f516bc04780ddd8fc;hb=76c815519021c83247a87d9f4318fc4aaa533f56;hpb=247c7ba624f39b283f9e85816c0616348f39c1b6 diff --git a/system.tex b/system.tex index c68686f..a8852c0 100644 --- a/system.tex +++ b/system.tex @@ -1,3 +1,13 @@ +%% system.tex +%% +%% Copyright (C) 2000-2002 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", +%% with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the +%% license is included in the section entitled "GNU Free Documentation +%% License". +%% \chapter{La gestione del sistema, delle risorse, e degli errori} \label{cha:system} @@ -10,7 +20,7 @@ e degli errori. -\section{La lettura delle caratteristiche del sistema} +\section{Capacità e caratteristiche del sistema} \label{sec:sys_characteristics} In questa sezione tratteremo le varie modalità con cui un programma può @@ -21,11 +31,11 @@ l'architettura hardware, l'implementazione del kernel e delle librerie, le opzioni di configurazione. La definizione di queste caratteristiche ed il tentativo di provvedere dei -meccanismi generali che i programmi potessero usare per ricavarle è uno degli +meccanismi generali che i programmi possono usare per ricavarle è uno degli aspetti più complessi e controversi con cui le diverse standardizzazioni si sono dovute confrontare, spesso con risultati spesso tutt'altro che chiari. -Proveremo comunque a dare una descrizione dei principali metodi previsti dai -vari standard per ricavare sia le caratteristiche specifiche del sistema, che +Daremo comunque una descrizione dei principali metodi previsti dai vari +standard per ricavare sia le caratteristiche specifiche del sistema, che quelle della gestione dei file. @@ -35,11 +45,11 @@ quelle della gestione dei file. Quando si devono determinare le le caratteristiche generali del sistema ci si trova di fronte a diverse possibilità; alcune di queste infatti possono dipendere dall'architettura dell'hardware (come le dimensioni dei tipi -interi), o dal sistema operativo (come la presenza o meno dei \textit{saved - id}), altre invece possono dipendere dalle opzioni con cui si è costruito -il sistema (ad esempio da come si è compilato il kernel), o dalla -configurazione del medesimo; per questo motivo in generale sono necessari due -tipi diversi di funzionalità: +interi), o dal sistema operativo (come la presenza o meno del gruppo degli +identificatori \textit{saved}), altre invece possono dipendere dalle opzioni +con cui si è costruito il sistema (ad esempio da come si è compilato il +kernel), o dalla configurazione del medesimo; per questo motivo in generale +sono necessari due tipi diversi di funzionalità: \begin{itemize*} \item la possibilità di determinare limiti ed opzioni al momento della compilazione. @@ -241,9 +251,10 @@ valori ottenuti da \func{sysconf}. \hline \macro{\_POSIX\_JOB\_CONTROL}& il sistema supporta il \textit{job control} (vedi - \secref{sec:sess_xxx}).\\ - \macro{\_POSIX\_SAVED\_IDS} & il sistema supporta i \textit{saved id} - (vedi \secref{sec:proc_access_id}). + \secref{sec:sess_job_control}).\\ + \macro{\_POSIX\_SAVED\_IDS} & il sistema supporta gli identificatori del + gruppo \textit{saved} (vedi + \secref{sec:proc_access_id}) per il controllo di accesso dei processi\\ \macro{\_POSIX\_VERSION} & fornisce la versione dello standard POSIX.1 supportata nel formato YYYYMML (ad esempio @@ -263,15 +274,15 @@ incluso automaticamente all'interno di \file{limits.h}). Di questi vale la pena menzionare alcune macro di uso comune, (riportate in \tabref{tab:sys_posix1_other}), che non indicano un valore specifico, ma denotano la presenza di alcune funzionalità nel sistema (come il supporto del -\textit{job control} o dei \textit{saved id}). +\textit{job control} o degli identificatori del gruppo \textit{saved}). Oltre allo standard POSIX.1, anche lo standard POSIX.2 definisce una serie di altre costanti. Siccome queste sono principalmente attinenti a limiti relativi alle applicazioni di sistema presenti (come quelli su alcuni parametri delle espressioni regolari o del comando \cmd{bc}), non li tratteremo esplicitamente, se ne trova una menzione completa nell'header file -\file{bits/posix2\_lim.h}, e alcuni di loro sono descritti nella man page di -\func{sysconf} e nel manuale delle \acr{glibc}. +\file{bits/posix2\_lim.h}, e alcuni di loro sono descritti nella pagina di +manuale di \func{sysconf} e nel manuale delle \acr{glibc}. \subsection{La funzione \func{sysconf}} @@ -331,7 +342,7 @@ relative spiegazioni, si pu \textit{process time} (vedi \secref{sec:sys_unix_time}).\\ \texttt{\_SC\_JOB\_CONTROL}&\macro{\_POSIX\_JOB\_CONTROL}& Indica se è supportato il \textit{job control} (vedi - \secref{sec:sess_xxx}) in stile POSIX.\\ + \secref{sec:sess_job_control}) in stile POSIX.\\ \texttt{\_SC\_SAVED\_IDS}&\macro{\_POSIX\_SAVED\_IDS}& Indica se il sistema supporta i \textit{saved id} (vedi \secref{sec:proc_access_id}).\\ @@ -387,19 +398,20 @@ riportate in \tabref{tab:sys_file_macro}. \begin{table}[htb] \centering \footnotesize - \begin{tabular}[c]{|l|r|p{8cm}|} + \begin{tabular}[c]{|l|r|l|} \hline \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \macro{NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\ - \macro{PATH\_MAX}& 256 & lunghezza in byte di pathname.\\ - \macro{PIPE\_BUF}&4096 & byte scrivibili atomicamente in una pipe\\ \macro{LINK\_MAX} &8 & numero massimo di link a un file\\ - \macro{MAX\_CANON}&255 & spazio disponibile nella coda di input - canonica del terminale\\ + \macro{NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\ + \macro{PATH\_MAX}& 256 & lunghezza in byte di un pathname.\\ + \macro{PIPE\_BUF}&4096 & byte scrivibili atomicamente in una pipe + (vedi \secref{sec:ipc_pipes}).\\ + \macro{MAX\_CANON}&255 & dimensione di una riga di terminale in modo + canonico (vedi \secref{sec:term_design}).\\ \macro{MAX\_INPUT}&255 & spazio disponibile nella coda di input - del terminale\\ + del terminale (vedi \secref{sec:term_design}).\\ \hline \end{tabular} \caption{Macro per i limiti sulle caratteristiche dei file.} @@ -415,21 +427,20 @@ analoghe di \tabref{tab:sys_posix1_general}. \begin{table}[htb] \centering \footnotesize - \begin{tabular}[c]{|l|r|p{8cm}|} + \begin{tabular}[c]{|l|r|l|} \hline \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ - \macro{\_POSIX\_LINK\_MAX} &8 & numero massimo di link a un file\\ - \macro{\_POSIX\_MAX\_CANON}&255 & spazio disponibile nella coda di input - canonica del terminale\\ - \macro{\_POSIX\_MAX\_INPUT}&255 & spazio disponibile nella coda di input - del terminale\\ + \macro{\_POSIX\_LINK\_MAX} &8 & numero massimo di link a un file.\\ \macro{\_POSIX\_NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\ - \macro{\_POSIX\_PATH\_MAX}& 256 & lunghezza in byte di pathname.\\ + \macro{\_POSIX\_PATH\_MAX}& 256 & lunghezza in byte di un pathname.\\ \macro{\_POSIX\_PIPE\_BUF}& 512 & byte scrivibili atomicamente in una - pipe\\ + pipe.\\ + \macro{\_POSIX\_MAX\_CANON}&255 & dimensione di una riga di + terminale in modo canonico.\\ + \macro{\_POSIX\_MAX\_INPUT}&255 & spazio disponibile nella coda di input + del terminale.\\ % \macro{\_POSIX\_MQ\_OPEN\_MAX}& 8& \\ % \macro{\_POSIX\_MQ\_PRIO\_MAX}& 32& \\ % \macro{\_POSIX\_FD\_SETSIZE}& 16 & \\ @@ -487,7 +498,7 @@ suo prototipo Restituisce informazioni sul sistema nella struttura \param{info}. \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di - fallimento, nel qual caso \var{errno} viene impostata a \macro{EFAULT}.} + fallimento, nel qual caso \var{errno} assumerà il valore \macro{EFAULT}.} \end{prototype} La funzione, che viene usata dal comando \cmd{uname}, restituisce le @@ -504,7 +515,7 @@ indicano rispettivamente: \item il nome del domino. \end{itemize*} l'ultima informazione è stata aggiunta di recente e non è prevista dallo -standard POSIX, essa è accessibile, come mostrato in \figref{fig:sig_stack_t}, +standard POSIX, essa è accessibile, come mostrato in \figref{fig:sys_utsname}, solo definendo \macro{\_GNU\_SOURCE}. \begin{figure}[!htb] @@ -534,11 +545,11 @@ In generale si tenga presente che le dimensioni delle stringe di una \macro{\_UTSNAME\_LENGTH} per i campi standard e \macro{\_UTSNAME\_DOMAIN\_LENGTH} per quello specifico per il nome di dominio; altri sistemi usano nomi diversi come \macro{SYS\_NMLN} o \macro{\_SYS\_NMLN} -o \macro{UTSLEN} che possono avere valori diversi. Nel caso di Linux +o \macro{UTSLEN} che possono avere valori diversi.\footnote{Nel caso di Linux \func{uname} corrisponde in realtà a 3 system call diverse, le prime due usano rispettivamente delle lunghezze delle stringhe di 9 e 65 byte; la terza usa anch'essa 65 byte, ma restituisce anche l'ultimo campo, \var{domainname}, con -una lunghezza di 257 byte. +una lunghezza di 257 byte.} \section{Opzioni e configurazione del sistema} @@ -555,11 +566,9 @@ da uno standard, ogni sistema pu configurazione, che, non essendo mai fissi e variando da sistema a sistema, non sono stati inclusi nella standardizzazione della sezione precedente. Per questi occorre, oltre al meccanismo di impostazione, pure un meccanismo di -lettura. - -Affronteremo questi argomenti in questa sezione, insieme alle funzioni che si -usano per il controllo di altre caratteristiche generali del sistema, come -quelle per la gestione dei filesystem e di utenti e gruppi. +lettura. Affronteremo questi argomenti in questa sezione, insieme alle +funzioni che si usano per il controllo di altre caratteristiche generali del +sistema, come quelle per la gestione dei filesystem e di utenti e gruppi. \subsection{La funzione \func{sysctl} ed il filesystem \file{/proc}} @@ -570,23 +579,21 @@ sistema l'implementazione è specifica di Linux; il suo prototipo è: \begin{functions} \headdecl{unistd.h} -\headdecl{linux/unistd.h} -\headdecl{linux/sysctl.h} \funcdecl{int sysctl(int *name, int nlen, void *oldval, size\_t *oldlenp, void *newval, size\_t newlen)} Legge o scrive uno dei parametri di sistema. \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di - errore, nel qual caso \var{errno} viene impostata ai valori: + errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\macro{EPERM}] il processo non ha il permesso di accedere ad uno dei - componenti nel cammino specificato per il parametro, o non ha il permesso - di accesso al parametro nella modalità scelta. + \item[\macro{EPERM}] non si ha il permesso di accedere ad uno dei componenti + nel cammino specificato per il parametro, o di accedere al parametro nella + modalità scelta. \item[\macro{ENOTDIR}] non esiste un parametro corrispondente al nome \param{name}. - \item[\macro{EFAULT}] si è specificato \param{oldlenp} zero quando - \param{oldval} è non nullo. +% \item[\macro{EFAULT}] si è specificato \param{oldlenp} zero quando +% \param{oldval} è non nullo. \item[\macro{EINVAL}] o si è specificato un valore non valido per il parametro che si vuole impostare o lo spazio provvisto per il ritorno di un valore non è delle giuste dimensioni. @@ -594,14 +601,19 @@ Legge o scrive uno dei parametri di sistema. quando non si è specificato sufficiente spazio per ricevere il valore di un parametro. \end{errlist} + ed inoltre \macro{EFAULT}. } \end{functions} I parametri a cui la funzione permettere di accedere sono organizzati in -maniera gerarchica all'interno un albero; 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 pathname (da cui l'uso alternativo del -filesystem \file{/proc}, che vedremo dopo). +maniera gerarchica all'interno 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 + \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 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 @@ -753,7 +765,7 @@ significativi sono un \textit{magic number}\footnote{cio riservata al \textit{magic number}.} mentre i 16 meno significativi sono usati per specificare le opzioni; essi sono usati come maschera binaria e vanno impostati con un OR aritmetico della costante \macro{MS\_MGC\_VAL} con i -valori riportati in \ntab. +valori riportati in \tabref{tab:sys_mount_flags}. \begin{table}[htb] \footnotesize @@ -807,7 +819,7 @@ Una volta che non si voglia pi Smonta il filesystem montato sulla directory \param{target}. \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di - fallimento, nel qual caso \var{errno} viene impostata a: + fallimento, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EPERM}] il processo non ha i privilegi di amministratore. \item[\macro{EBUSY}] \param{target} è la directory di lavoro di qualche @@ -862,7 +874,7 @@ informazioni riguardo al filesystem su cui si trova un certo file, sono posto il file specificato. \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di - errore, nel qual caso \var{errno} viene impostata ai valori: + errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{ENOSYS}] il filesystem su cui si trova il file specificato non supporta la funzione. @@ -875,10 +887,10 @@ informazioni riguardo al filesystem su cui si trova un certo file, sono Queste funzioni permettono di ottenere una serie di informazioni generali riguardo al filesystem su cui si trova il file specificato; queste vengono restituite una struttura \param{buf} di tipo \type{statfs} definita come in -\ref{fig:sys_statfs}, ed i campi che sono indefiniti per il filesystem in -esame sono impostati a zero. I valori del campo \var{f\_type} sono definiti per -i vari filesystem nei relativi file di header dei sorgenti del kernel da -costanti del tipo \macro{XXX\_SUPER\_MAGIC}, dove \macro{XXX} in genere è il +\figref{fig:sys_statfs}, ed i campi che sono indefiniti per il filesystem in +esame sono impostati a zero. I valori del campo \var{f\_type} sono definiti +per i vari filesystem nei relativi file di header dei sorgenti del kernel da +costanti del tipo \var{XXX\_SUPER\_MAGIC}, dove \var{XXX} in genere è il nome del filesystem stesso. \begin{figure}[!htb] @@ -1122,7 +1134,8 @@ capacit completa. Per questo motivo l'uso di queste funzioni è deprecato in favore dell'uso di PAM, ci limiteremo pertanto ad elencarle in \tabref{tab:sys_passwd_func}, rimandando chi fosse interessato alle rispettive -man page e al manuale delle \acr{glibc} per i dettagli del loro funzionamento. +pagine di manuale e al manuale delle \acr{glibc} per i dettagli del loro +funzionamento. @@ -1472,10 +1485,10 @@ struct rlimit { \end{figure} In genere il superamento di un limite comporta o l'emissione di un segnale o -il fallimento della system call che lo ha provocato; per far leggere o impostare -i limiti di utilizzo delle risorse da parte di un processo le \acr{glibc} -prevedono due funzioni, \func{getrlimit} e \func{setrlimit}, i cui prototipi -sono: +il fallimento della system call che lo ha provocato; per far leggere o +impostare i limiti di utilizzo delle risorse da parte di un processo le +\acr{glibc} prevedono due funzioni, \func{getrlimit} e \func{setrlimit}, i cui +prototipi sono: \begin{functions} \headdecl{sys/time.h} \headdecl{sys/resource.h} @@ -1490,7 +1503,7 @@ sono: Imposta il limite per la risorsa \param{resource}. \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di - errore, nel qual caso \var{errno} viene impostata ai valori: + errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EINVAL}] I valori per \param{resource} non sono validi. \item[\macro{EPERM}] Un processo senza i privilegi di amministratore ha @@ -1868,7 +1881,7 @@ sono: Imposta il tempo di sistema. \bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in - caso di errore, nel qual caso \var{errno} può assumere il valori + caso di errore, nel qual caso \var{errno} può assumere i valori \macro{EINVAL} \macro{EFAULT} e per \func{settimeofday} anche \macro{EPERM}.} \end{functions} @@ -2053,8 +2066,8 @@ essere ritrovato in \cite{glibc}. Il valore delle costanti per \var{mode} può essere anche espresso, secondo la sintassi specificata per la forma equivalente di questa funzione definita come -\func{ntp\_adjtime}, utilizzando il prefisso \macro{MOD} al posto di -\macro{ADJ}. +\func{ntp\_adjtime}, utilizzando il prefisso \code{MOD} al posto di +\code{ADJ}. \begin{table}[htb] \footnotesize @@ -2260,30 +2273,30 @@ indefinito. \textbf{Modificatore} & \textbf{Esempio} & \textbf{Significato}\\ \hline \hline - \macro{\%a}&\texttt{Wed} & Nome del giorno, abbreviato.\\ - \macro{\%A}&\texttt{Wednesday} & Nome del giorno, completo.\\ - \macro{\%b}&\texttt{Apr} & Nome del mese, abbreviato.\\ - \macro{\%B}&\texttt{April} & Nome del mese, completo.\\ - \macro{\%c}&\texttt{Wed Apr 24 18:40:50 2002}& Data e ora.\\ - \macro{\%d}&\texttt{24} & Giorno del mese.\\ - \macro{\%H}&\texttt{18} & Ora del giorno, da 0 a 24.\\ - \macro{\%I}&\texttt{06} & Ora del giorno, da 0 a 12.\\ - \macro{\%j}&\texttt{114} & Giorno dell'anno.\\ - \macro{\%m}&\texttt{04} & Mese dell'anno.\\ - \macro{\%M}&\texttt{40} & Minuto.\\ - \macro{\%p}&\texttt{PM} & AM/PM.\\ - \macro{\%S}&\texttt{50} & Secondo.\\ - \macro{\%U}&\texttt{16} & Settimana dell'anno (partendo dalla - domenica).\\ - \macro{\%w}&\texttt{3} & Giorno della settimana. \\ - \macro{\%W}&\texttt{16} & Settimana dell'anno (partendo dal - lunedì).\\ - \macro{\%x}&\texttt{04/24/02} & La data.\\ - \macro{\%X}&\texttt{18:40:50} & L'ora.\\ - \macro{\%y}&\texttt{02} & Anno nel secolo.\\ - \macro{\%Y}&\texttt{2002} & Anno.\\ - \macro{\%Z}&\texttt{CEST} & Nome della \textit{timezone}.\\ - \macro{\%\%}&\texttt{\%} & Il carattere \%.\\ + \var{\%a}&\texttt{Wed} & Nome del giorno, abbreviato.\\ + \var{\%A}&\texttt{Wednesday} & Nome del giorno, completo.\\ + \var{\%b}&\texttt{Apr} & Nome del mese, abbreviato.\\ + \var{\%B}&\texttt{April} & Nome del mese, completo.\\ + \var{\%c}&\texttt{Wed Apr 24 18:40:50 2002}& Data e ora.\\ + \var{\%d}&\texttt{24} & Giorno del mese.\\ + \var{\%H}&\texttt{18} & Ora del giorno, da 0 a 24.\\ + \var{\%I}&\texttt{06} & Ora del giorno, da 0 a 12.\\ + \var{\%j}&\texttt{114} & Giorno dell'anno.\\ + \var{\%m}&\texttt{04} & Mese dell'anno.\\ + \var{\%M}&\texttt{40} & Minuto.\\ + \var{\%p}&\texttt{PM} & AM/PM.\\ + \var{\%S}&\texttt{50} & Secondo.\\ + \var{\%U}&\texttt{16} & Settimana dell'anno (partendo dalla + domenica).\\ + \var{\%w}&\texttt{3} & Giorno della settimana. \\ + \var{\%W}&\texttt{16} & Settimana dell'anno (partendo dal + lunedì).\\ + \var{\%x}&\texttt{04/24/02} & La data.\\ + \var{\%X}&\texttt{18:40:50} & L'ora.\\ + \var{\%y}&\texttt{02} & Anno nel secolo.\\ + \var{\%Y}&\texttt{2002} & Anno.\\ + \var{\%Z}&\texttt{CEST} & Nome della \textit{timezone}.\\ + \var{\%\%}&\texttt{\%} & Il carattere \%.\\ \hline \end{tabular} \caption{Valori previsti dallo standard ANSI C per modificatore della @@ -2340,7 +2353,7 @@ normale. I valori che può assumere \var{errno} sono riportati in \capref{cha:errors}, nell'header \file{errno.h} sono anche definiti i nomi simbolici per le costanti numeriche che identificano i vari errori; essi iniziano tutti per -\macro{E} e si possono considerare come nomi riservati. In seguito faremo +\var{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}. @@ -2372,8 +2385,8 @@ prima funzione che si pu \bodydesc{La funzione ritorna il puntatore alla stringa col messaggio di errore in caso di successo e \macro{NULL} in caso di errore, nel qual caso - \var{errno} sarà impostata a \macro{EINVAL} se si è specificato un numero di - errore non valido.} + \var{errno} assumerà il valore \macro{EINVAL} se si è specificato un + numero di errore non valido.} \end{prototype} In generale \func{strerror} viene usata passando \var{errno} come parametro; @@ -2388,7 +2401,7 @@ programma e che \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 man page), che + 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: \begin{prototype}{string.h}