-\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ò
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.
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.
\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
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
\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}).\\
\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.}
\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 & \\
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
\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]
\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}
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}}
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.
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
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
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
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.
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
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}
\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;