-\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.
\hline
\macro{\_POSIX\_JOB\_CONTROL}& il sistema supporta il
\textit{job control} (vedi
- \secref{sec:sess_xxx}).\\
+ \secref{sec:sess_job_control}).\\
\macro{\_POSIX\_SAVED\_IDS} & il sistema supporta gli identificatori del
gruppo \textit{saved} (vedi
\secref{sec:proc_access_id})
\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
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;