Completata sysctl
authorSimone Piccardi <piccardi@gnulinux.it>
Sat, 5 Jan 2002 13:30:20 +0000 (13:30 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sat, 5 Jan 2002 13:30:20 +0000 (13:30 +0000)
system.tex

index 8cc2af886434136d8f085e1155bc475d53aa3890..b92330733763e21707ac188fe34e51aaf27f5d69 100644 (file)
@@ -525,11 +525,96 @@ meccanismo di settaggio, pure un meccanismo di lettura.
 Affronteremo questi argomenti in questa sezione, insieme alle funzioni che si
 usano per la gestione ed il controllo dei filesystem. 
 
-\subsection{La funzione \func{sysctl}}
+
+\subsection{La funzione \func{sysctl} ed il filesystem \file{/proc}}
 \label{sec:sys_sysctl}
 
-\subsection{Il filesystem \file{/proc}}
-\label{sec:sys_proc_files}
+La funzione che permette la lettura ed il settaggio dei parametri del kernel è
+\func{sysctl}, è una funzione derivata da BSD4.4, ma 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)}
+
+
+\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+  errore, nel qual caso \var{errno} viene settato ai 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{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{EINVAL}] o si è specificato un valore non valido per il
+    parametro che si vuole settare o lo spazio provvisto per il ritorno di un
+    valore non è delle giuste dimensioni.
+  \item[\macro{ENOMEM}] talvolta viene usato più correttamente questo errore
+    quando non si è specificato sufficiente spazio per ricevere il valore di un
+    parametro.
+  \end{errlist}
+}
+\end{functions}
+
+I parametri a cui la funzione permettere di accedere sono organizzati in
+maniera gerarchica, e per accedere ad uno di essi occorre specificare un
+cammino attraverso le varie strutture, in maniera analoga a come si specifica
+un pathname (da cui l'uso alternativo del filesystem \file{/proc} che vedremo
+dopo).
+
+Ciascun nodo è identificato da un valore intero, ed il cammino che arriva ad
+identificare un parametro specifico è passato attraverso l'array \param{name},
+di lunghezza \param{nlen}, che contiene la sequenza dei vari nodi da
+attraversare. Il formato del valore di un parametro dipende dallo stesso e può
+essere un intero, una stringa o anche una struttura complessa. 
+
+L'indirizzo a cui il valore deve essere letto è specificato da
+\param{oldvalue}, e lo spazio ivi disponibile è specificato da \param{oldlenp}
+(passato come puntatore per avere indietro la dimensione effettiva di quanto
+letto); il valore che si vuole scrivere è passato in \param{newval} e la sua
+dimensione in \param{newlen}.
+
+Si può effettuare anche una lettura e scrittura simultanea, nel qual caso il
+valore letto è 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
+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,
+alcuni esempi di parametri ottenibili sono:
+\begin{itemize*}
+\item il nome di dominio
+\item i parametri del meccanismo di \textit{paging}.
+\item il filesystem montato come radice
+\item la data di compilazione del kernel
+\item i parametri dello stack TCP
+\item il numero massimo di file aperti
+\end{itemize*}
+
+Come accennato in Linux si ha una modalità alternativa per accedere alle
+stesse informazioni di \func{sysctl} attaverso l'uso del filesystem
+\file{/proc}. Questo è un filesystem virtuale, generato direttamente dal
+kernel, che non fa riferimento a nessun dispositivo fisico, ma presenta in
+forma di file alcune delle strutture interne del kernel stesso.
+
+In particolare l'albero dei valori di \func{sysctl} viene presentato in forma
+di file nella directory \file{/proc/sys}, cosicché è possibile accedervi
+speficando un pathname e leggendo e scrivendo sul file corrispondente al
+parametro scelto.  Il kernel si occupa di generare al volo il contenuto ed i
+nomi dei file corrispondenti, e questo ha il grande vantaggio di rendere
+accessibili i vari parametri a qualunque comando di shell e di permettere la
+navigazione dell'albero dei valori.
+
+Alcune delle corrispondenze con i valori di \func{sysctl} sono riportate nei
+commenti in \file{linux/sysctl.h}, la informazione disponibile in
+\file{/proc/sys} è riportata inoltre nella documentazione inclusa nei sorgenti
+del kernel, nella directory \file{Documentation/sysctl}.
 
 
 \subsection{La configurazione dei filesystem}