%% system.tex
%%
-%% Copyright (C) 2000-2004 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2005 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",
+%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
%% 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".
In generale ogni limite o caratteristica del sistema per cui è definita una
macro, sia dagli standard ANSI C e ISO C90, che da POSIX.1 e POSIX.2, può
essere ottenuto attraverso una chiamata a \func{sysconf}. Il valore si otterrà
-specificando come valore del parametro \param{name} il nome ottenuto
+specificando come valore dell'argomento \param{name} il nome ottenuto
aggiungendo \code{\_SC\_} ai nomi delle macro definite dai primi due, o
sostituendolo a \code{\_POSIX\_} per le macro definite dagli gli altri due.
\hline
\const{LINK\_MAX} &8 & numero massimo di link a un file\\
\const{NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\
- \const{PATH\_MAX}& 256 & lunghezza in byte di un pathname.\\
+ \const{PATH\_MAX}& 256 & lunghezza in byte di un
+ \index{\textit{pathname}}\textit{pathname}.\\
\const{PIPE\_BUF}&4096 & byte scrivibili atomicamente in una pipe
(vedi sez.~\ref{sec:ipc_pipes}).\\
\const{MAX\_CANON}&255 & dimensione di una riga di terminale in modo
\hline
\const{\_POSIX\_LINK\_MAX} &8 & numero massimo di link a un file.\\
\const{\_POSIX\_NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\
- \const{\_POSIX\_PATH\_MAX}& 256 & lunghezza in byte di un pathname.\\
+ \const{\_POSIX\_PATH\_MAX}& 256 & lunghezza in byte di un
+ \index{\textit{pathname}}\textit{pathname}.\\
\const{\_POSIX\_PIPE\_BUF}& 512 & byte scrivibili atomicamente in una
- pipe.\\
+ pipe.\\
\const{\_POSIX\_MAX\_CANON}&255 & dimensione di una riga di
- terminale in modo canonico.\\
+ terminale in modo canonico.\\
\const{\_POSIX\_MAX\_INPUT}&255 & spazio disponibile nella coda di input
- del terminale.\\
+ del terminale.\\
% \const{\_POSIX\_MQ\_OPEN\_MAX}& 8& \\
% \const{\_POSIX\_MQ\_PRIO\_MAX}& 32& \\
% \const{\_POSIX\_FD\_SETSIZE}& 16 & \\
degli errori possibili relativi all'accesso a \param{path}).}
\end{prototype}
-E si noti come la funzione in questo caso richieda un parametro che specifichi
+E si noti come la funzione in questo caso richieda un argomento che specifichi
a quale file si fa riferimento, dato che il valore del limite cercato può
variare a seconda del filesystem. Una seconda versione della funzione,
-\funcd{fpathconf}, opera su un file descriptor invece che su un pathname. Il
-suo prototipo è:
+\funcd{fpathconf}, opera su un file descriptor invece che su un
+\index{\textit{pathname}}\textit{pathname}. Il suo prototipo è:
\begin{prototype}{unistd.h}{long fpathconf(int fd, int name)}
Restituisce il valore del parametro \param{name} per il file \param{fd}.
\bodydesc{È identica a \func{pathconf} solo che utilizza un file descriptor
- invece di un pathname; pertanto gli errori restituiti cambiano di
- conseguenza.}
+ invece di un \index{\textit{pathname}}\textit{pathname}; pertanto gli
+ errori restituiti cambiano di conseguenza.}
\end{prototype}
\noindent ed il suo comportamento è identico a quello di \func{pathconf}.
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).
+per la risoluzione di un \index{\textit{pathname}}\textit{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
In particolare l'albero dei valori di \func{sysctl} viene presentato in forma
di file nella directory \file{/proc/sys}, cosicché è possibile accedervi
-specificando 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.
+specificando un \index{\textit{pathname}}\textit{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 dei file presenti in \file{/proc/sys} con i valori
di \func{sysctl} sono riportate nei commenti del codice che può essere trovato
\textit{mount point} o di spostarlo quando \param{target} non è un
\textit{mount point} o è \file{/}.
\item[\errcode{EACCES}] non si ha il permesso di accesso su uno dei
- componenti del pathname, o si è cercato di montare un filesystem
- disponibile in sola lettura senza averlo specificato o il device
- \param{source} è su un filesystem montato con l'opzione \const{MS\_NODEV}.
+ componenti del \index{\textit{pathname}}\textit{pathname}, o si è cercato
+ di montare un filesystem disponibile in sola lettura senza averlo
+ specificato o il device \param{source} è su un filesystem montato con
+ l'opzione \const{MS\_NODEV}.
\item[\errcode{ENXIO}] il \textit{major number} del device \param{source} è
sbagliato.
\item[\errcode{EMFILE}] la tabella dei device \textit{dummy} è piena.
kernel nelle system call eseguite per conto del processo.
Gli altri tre campi servono a quantificare l'uso della memoria
-virtuale\index{memoria virtuale} e corrispondono rispettivamente al numero di
-\textit{page fault}\index{page fault} (vedi sez.~\ref{sec:proc_mem_gen})
-avvenuti senza richiedere I/O su disco (i cosiddetti \textit{minor page
- fault}), a quelli che invece han richiesto I/O su disco (detti invece
-\textit{major page fault}) ed al numero di volte che il processo è stato
-completamente tolto dalla memoria per essere inserito nello swap.
+virtuale\index{memoria~virtuale} e corrispondono rispettivamente al numero di
+\textit{page fault}\index{\textit{page~fault}} (vedi
+sez.~\ref{sec:proc_mem_gen}) avvenuti senza richiedere I/O su disco (i
+cosiddetti \textit{minor page fault}), a quelli che invece han richiesto I/O
+su disco (detti invece \textit{major page fault}) ed al numero di volte che il
+processo è stato completamente tolto dalla memoria per essere inserito nello
+swap.
In genere includere esplicitamente \file{<sys/time.h>} non è più strettamente
necessario, ma aumenta la portabilità, e serve comunque quando, come nella
La gestione della memoria è già stata affrontata in dettaglio in
sez.~\ref{sec:proc_memory}; abbiamo visto allora che il kernel provvede il
-meccanismo della memoria virtuale\index{memoria virtuale} attraverso la
+meccanismo della memoria virtuale\index{memoria~virtuale} attraverso la
divisione della memoria fisica in pagine.
In genere tutto ciò è del tutto trasparente al singolo processo, ma in certi
\end{prototype}
La funzione restituisce in ciascun elemento di \param{loadavg} il numero medio
-di processi attivi sulla coda dello scheduler\index{scheduler}, calcolato su
-un diverso intervalli di tempo. Il numero di intervalli che si vogliono
-leggere è specificato da \param{nelem}, dato che nel caso di Linux il carico
-viene valutato solo su tre intervalli (corrispondenti a 1, 5 e 15 minuti),
-questo è anche il massimo valore che può essere assegnato a questo argomento.
+di processi attivi sulla coda dello scheduler\index{\textit{scheduler}},
+calcolato su un diverso intervalli di tempo. Il numero di intervalli che si
+vogliono leggere è specificato da \param{nelem}, dato che nel caso di Linux il
+carico viene valutato solo su tre intervalli (corrispondenti a 1, 5 e 15
+minuti), questo è anche il massimo valore che può essere assegnato a questo
+argomento.
\end{prototype}
La funzione restituisce il tempo in tick, quindi se si vuole il tempo in
-secondi occorre moltiplicare il risultato per la costante
+secondi occorre dividere il risultato per la costante
\const{CLOCKS\_PER\_SEC}.\footnote{le \acr{glibc} seguono lo standard ANSI C,
POSIX richiede che \const{CLOCKS\_PER\_SEC} sia definito pari a 1000000
indipendentemente dalla risoluzione del timer di sistema.} In genere
quindi anche per quelle che tratteremo in seguito) può essere utilizzata solo
da un processo coi privilegi di amministratore.
-Il secondo parametro di entrambe le funzioni è una struttura
+Il secondo argomento di entrambe le funzioni è una struttura
\struct{timezone}, che storicamente veniva utilizzata per specificare appunto
la \textit{time zone}, cioè l'insieme del fuso orario e delle convenzioni per
l'ora legale che permettevano il passaggio dal tempo universale all'ora
-locale. Questo parametro oggi è obsoleto ed in Linux non è mai stato
+locale. Questo argomento oggi è obsoleto ed in Linux non è mai stato
utilizzato; esso non è supportato né dalle vecchie \textsl{libc5}, né dalle
\textsl{glibc}: pertanto quando si chiama questa funzione deve essere sempre
impostato a \val{NULL}.
sistema in modo che esso sia sempre crescente in maniera monotona. Il valore
di \param{delta} esprime il valore di cui si vuole spostare l'orologio; se è
positivo l'orologio sarà accelerato per un certo tempo in modo da guadagnare
-il tempo richiesto, altrimenti sarà rallentato. Il secondo parametro viene
+il tempo richiesto, altrimenti sarà rallentato. Il secondo argomento viene
usato, se non nullo, per ricevere il valore dell'ultimo aggiustamento
effettuato.
\func{asctime} come \code{asctime(localtime(t)}. Dato che l'uso di una stringa
statica rende le funzioni non rientranti POSIX.1c e SUSv2 prevedono due
sostitute rientranti, il cui nome è al solito ottenuto appendendo un
-\code{\_r}, che prendono un secondo parametro \code{char *buf}, in cui
+\code{\_r}, che prendono un secondo argomento \code{char *buf}, in cui
l'utente deve specificare il buffer su cui la stringa deve essere copiata
(deve essere di almeno 26 caratteri).
Anche in questo caso le prime due funzioni restituiscono l'indirizzo di una
struttura allocata staticamente, per questo sono state definite anche altre
due versioni rientranti (con la solita estensione \code{\_r}), che prevedono
-un secondo parametro \code{struct tm *result}, fornito dal chiamante, che deve
+un secondo argomento \code{struct tm *result}, fornito dal chiamante, che deve
preallocare la struttura su cui sarà restituita la conversione.
Come mostrato in fig.~\ref{fig:sys_tm_struct} il \textit{broken-down time}
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,
+In generale \func{strerror} viene usata passando \var{errno} come argomento,
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.
completo del programma è allegato nel file \file{ErrCode.c} e contiene pure la
gestione delle opzioni e tutte le definizioni necessarie ad associare il
valore numerico alla costante simbolica. In particolare si è riportata la
-sezione che converte la stringa passata come parametro in un intero
+sezione che converte la stringa passata come argomento in un intero
(\texttt{\small 1--2}), controllando con i valori di ritorno di \func{strtol}
che la conversione sia avvenuta correttamente (\texttt{\small 4--10}), e poi
stampa, a seconda dell'opzione scelta il messaggio di errore (\texttt{\small
La funzione fa parte delle estensioni GNU per la gestione degli errori,
l'argomento \param{format} prende la stessa sintassi di \func{printf}, ed i
-relativi parametri devono essere forniti allo stesso modo, mentre
+relativi argomenti devono essere forniti allo stesso modo, mentre
\param{errnum} indica l'errore che si vuole segnalare (non viene quindi usato
il valore corrente di \var{errno}); la funzione stampa sullo standard error il
nome del programma, come indicato dalla variabile globale \var{program\_name},