\macro{STREAM\_MAX}& 8& massimo numero di stream aperti per
processo in contemporanea.\\
\macro{TZNAME\_MAX}& 6& dimensione massima del nome di una
\macro{STREAM\_MAX}& 8& massimo numero di stream aperti per
processo in contemporanea.\\
\macro{TZNAME\_MAX}& 6& dimensione massima del nome di una
\macro{NGROUPS\_MAX}& 32& numero di gruppi supplementari per
processo (vedi \secref{sec:proc_access_id}).\\
\macro{SSIZE\_MAX}&32767& valore massimo del tipo \type{ssize\_t}.\\
\macro{NGROUPS\_MAX}& 32& numero di gruppi supplementari per
processo (vedi \secref{sec:proc_access_id}).\\
\macro{SSIZE\_MAX}&32767& valore massimo del tipo \type{ssize\_t}.\\
\macro{\_POSIX\_STREAM\_MAX} & 8& massimo numero di stream aperti per
processo in contemporanea.\\
\macro{\_POSIX\_TZNAME\_MAX} & & dimensione massima del nome di una
\macro{\_POSIX\_STREAM\_MAX} & 8& massimo numero di stream aperti per
processo in contemporanea.\\
\macro{\_POSIX\_TZNAME\_MAX} & & dimensione massima del nome di una
\bodydesc{La funzione restituisce indietro il valore del parametro
richiesto, o 1 se si tratta di un'opzione disponibile, 0 se l'opzione non
\bodydesc{La funzione restituisce indietro il valore del parametro
richiesto, o 1 se si tratta di un'opzione disponibile, 0 se l'opzione non
Restituisce il valore del parametro \param{name} per il file \param{path}.
\bodydesc{La funzione restituisce indietro il valore del parametro
Restituisce il valore del parametro \param{name} per il file \param{path}.
\bodydesc{La funzione restituisce indietro il valore del parametro
Restituisce informazioni sul sistema nella struttura \param{info}.
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
Restituisce informazioni sul sistema nella struttura \param{info}.
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
da uno standard, ogni sistema può avere una sua serie di altri parametri di
configurazione, che, non essendo mai fissi e variando da sistema a sistema,
non sono stati inclusi nella standardizzazione della sezione precedente. Per
da uno standard, ogni sistema può avere una sua serie di altri parametri di
configurazione, che, non essendo mai fissi e variando da sistema a sistema,
non sono stati inclusi nella standardizzazione della sezione precedente. Per
-La funzione che permette la lettura ed il settaggio dei parametri del sistema
-è \func{sysctl}; è una funzione derivata da BSD4.4, ma l'implementazione è
-specifica di Linux; il suo prototipo è:
+La funzione che permette la lettura ed l'impostazione dei parametri del
+sistema è \func{sysctl}; è una funzione derivata da BSD4.4, ma
+l'implementazione è specifica di Linux; il suo prototipo è:
Legge o scrive uno dei parametri di sistema.
\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
Legge o scrive uno dei parametri di sistema.
\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
\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
\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
\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
\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
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
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
L'indirizzo a cui il valore corrente del parametro deve essere letto è
specificato da \param{oldvalue}, e lo spazio ivi disponibile è specificato da
\param{oldlenp} (passato come puntatore per avere indietro la dimensione
L'indirizzo a cui il valore corrente del parametro deve essere letto è
specificato da \param{oldvalue}, e lo spazio ivi disponibile è specificato da
\param{oldlenp} (passato come puntatore per avere indietro la dimensione
passato in \param{newval} e la sua dimensione in \param{newlen}.
Si può effettuare anche una lettura e scrittura simultanea, nel qual caso il
passato in \param{newval} e la sua dimensione in \param{newlen}.
Si può effettuare anche una lettura e scrittura simultanea, nel qual caso il
costante \macro{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags}
riservata al \textit{magic number}.} mentre i 16 meno significativi sono
usati per specificare le opzioni; essi sono usati come maschera binaria e
costante \macro{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags}
riservata al \textit{magic number}.} mentre i 16 meno significativi sono
usati per specificare le opzioni; essi sono usati come maschera binaria e
usa invece l'argomento \param{data} che serve per passare le ulteriori
informazioni necessarie, che ovviamente variano da filesystem a filesystem.
usa invece l'argomento \param{data} che serve per passare le ulteriori
informazioni necessarie, che ovviamente variano da filesystem a filesystem.
\textsl{rimontaggio} di un filesystem, cosa che permette di cambiarne al volo
alcune delle caratteristiche di funzionamento (ad esempio passare da sola
lettura a lettura/scrittura). Questa operazione è attivata attraverso uno dei
\textsl{rimontaggio} di un filesystem, cosa che permette di cambiarne al volo
alcune delle caratteristiche di funzionamento (ad esempio passare da sola
lettura a lettura/scrittura). Questa operazione è attivata attraverso uno dei
deve essere effettuato il rimontaggio del filesystem (con le opzioni
specificate dagli altri bit), anche in questo caso il valore di \param{source}
viene ignorato.
deve essere effettuato il rimontaggio del filesystem (con le opzioni
specificate dagli altri bit), anche in questo caso il valore di \param{source}
viene ignorato.
Smonta il filesystem montato sulla directory \param{target}.
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
Smonta il filesystem montato sulla directory \param{target}.
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
\begin{errlist}
\item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
\item[\macro{EBUSY}] \param{target} è la directory di lavoro di qualche
\begin{errlist}
\item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
\item[\macro{EBUSY}] \param{target} è la directory di lavoro di qualche
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
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
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
nome del filesystem stesso.
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
nome del filesystem stesso.
Restituiscono le informazioni relative all'utente specificato.
\bodydesc{Le funzioni ritornano 0 in caso di successo e un codice d'errore
Restituiscono le informazioni relative all'utente specificato.
\bodydesc{Le funzioni ritornano 0 in caso di successo e un codice d'errore
viene restituito il puntatore ai dati ottenuti, cioè \param{buffer} nel caso
l'utente esista, o \macro{NULL} altrimenti. Qualora i dati non possano essere
contenuti nei byte specificati da \param{buflen}, la funzione fallirà
viene restituito il puntatore ai dati ottenuti, cioè \param{buffer} nel caso
l'utente esista, o \macro{NULL} altrimenti. Qualora i dati non possano essere
contenuti nei byte specificati da \param{buflen}, la funzione fallirà
Restituiscono le informazioni relative al gruppo specificato.
\bodydesc{Le funzioni ritornano 0 in caso di successo e un codice d'errore
Restituiscono le informazioni relative al gruppo specificato.
\bodydesc{Le funzioni ritornano 0 in caso di successo e un codice d'errore
Le funzioni viste finora sono in grado di leggere le informazioni sia dal file
delle password in \file{/etc/passwd} che con qualunque altro metodo sia stato
utilizzato per mantenere il database degli utenti. Non permettono però di
Le funzioni viste finora sono in grado di leggere le informazioni sia dal file
delle password in \file{/etc/passwd} che con qualunque altro metodo sia stato
utilizzato per mantenere il database degli utenti. Non permettono però di
al database degli utenti, derivata da SVID, che però funziona soltanto con un
database che sia tenuto su un file che abbia il formato classico di
\file{/etc/passwd}.
al database degli utenti, derivata da SVID, che però funziona soltanto con un
database che sia tenuto su un file che abbia il formato classico di
\file{/etc/passwd}.
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:
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{errlist}
\item[\macro{EINVAL}] I valori per \param{resource} non sono validi.
\item[\macro{EPERM}] Un processo senza i privilegi di amministratore ha
\begin{errlist}
\item[\macro{EINVAL}] I valori per \param{resource} non sono validi.
\item[\macro{EPERM}] Un processo senza i privilegi di amministratore ha
evitare la creazione di \file{core} file.}
È inoltre definita la costante \macro{RLIM\_INFINITY} che permette di
evitare la creazione di \file{core} file.}
È inoltre definita la costante \macro{RLIM\_INFINITY} che permette di
variabile su cui duplicare il valore di ritorno.
Analoga a \func{time} è la funzione \func{stime} che serve per effettuare
variabile su cui duplicare il valore di ritorno.
Analoga a \func{time} è la funzione \func{stime} che serve per effettuare
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
che può essere \macro{EFAULT} o \macro{EPERM}.}
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
che può essere \macro{EFAULT} o \macro{EPERM}.}
\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
\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
seguito) può essere utilizzata solo da un processo coi privilegi di
amministratore. Il secondo parametro di entrambe le funzioni è una struttura
\var{timezone}, che storicamente veniva utilizzata per specificare appunto la
seguito) può essere utilizzata solo da un processo coi privilegi di
amministratore. Il secondo parametro di entrambe le funzioni è una struttura
\var{timezone}, che storicamente veniva utilizzata per specificare appunto la
l'ora legale che permettevano il passaggio dal tempo universale all'ora
locale. Questo parametro è obsoleto e in Linux non è mai stato utilizzato e
non è supportato né dalle vecchie \textsl{libc5}, né dalle \textsl{glibc}:
l'ora legale che permettevano il passaggio dal tempo universale all'ora
locale. Questo parametro è obsoleto e in Linux non è mai stato utilizzato e
non è supportato né dalle vecchie \textsl{libc5}, né dalle \textsl{glibc}:
Modificare l'orologio di sistema con queste funzioni è comunque problematico,
in quanto esse effettuano un cambiamento immediato. Questo può creare dei
buchi o delle ripetizioni nello scorrere dell'orologio di sistema, con
conseguenze indesiderate; ad esempio se si porta avanti l'orologio si possono
perdere delle esecuzioni di \cmd{cron} programmate nell'intervallo che si è
Modificare l'orologio di sistema con queste funzioni è comunque problematico,
in quanto esse effettuano un cambiamento immediato. Questo può creare dei
buchi o delle ripetizioni nello scorrere dell'orologio di sistema, con
conseguenze indesiderate; ad esempio se si porta avanti l'orologio si possono
perdere delle esecuzioni di \cmd{cron} programmate nell'intervallo che si è
di usare la funzione \func{adjtime}, il cui prototipo è:
\begin{prototype}{sys/time.h}
{int adjtime(const struct timeval *delta, struct timeval *olddelta)}
di usare la funzione \func{adjtime}, il cui prototipo è:
\begin{prototype}{sys/time.h}
{int adjtime(const struct timeval *delta, struct timeval *olddelta)}
così come effettuata in \file{sys/timex.h}, è riportata in
\figref{fig:sys_timex_struct}. L'azione della funzione dipende dal valore del
campo \var{mode}, che specifica quale parametro dell'orologio di sistema,
così come effettuata in \file{sys/timex.h}, è riportata in
\figref{fig:sys_timex_struct}. L'azione della funzione dipende dal valore del
campo \var{mode}, che specifica quale parametro dell'orologio di sistema,
valore nullo serve per leggere i parametri correnti; i valori diversi da zero
devono essere specificati come OR binario delle costanti riportate in
\secref{tab:sys_timex_mode}.
valore nullo serve per leggere i parametri correnti; i valori diversi da zero
devono essere specificati come OR binario delle costanti riportate in
\secref{tab:sys_timex_mode}.
reale e l'orologio di sistema, che
deve essere indicata in microsecondi
nel campo \var{offset} di
\var{timex}.\\
reale e l'orologio di sistema, che
deve essere indicata in microsecondi
nel campo \var{offset} di
\var{timex}.\\
fra il tempo reale e l'orologio di
sistema, che deve essere indicata
in parti per milione nel campo
\var{frequency} di \var{timex}.\\
fra il tempo reale e l'orologio di
sistema, che deve essere indicata
in parti per milione nel campo
\var{frequency} di \var{timex}.\\
sul tempo, espresso in microsecondi
nel campo \var{maxerror} di
\var{timex}.\\
sul tempo, espresso in microsecondi
nel campo \var{maxerror} di
\var{timex}.\\
sul tempo, espresso in microsecondi
nel campo \var{esterror} di
\var{timex}.\\
sul tempo, espresso in microsecondi
nel campo \var{esterror} di
\var{timex}.\\
valori di stato interni usati dal
sistema nella gestione
dell'orologio specificati nel campo
\var{status} di \var{timex}.\\
valori di stato interni usati dal
sistema nella gestione
dell'orologio specificati nel campo
\var{status} di \var{timex}.\\
in microsecondi, espresso nel campo
\var{tick} di \var{timex}.\\
in microsecondi, espresso nel campo
\var{tick} di \var{timex}.\\
dell'orologio secondo il valore del
campo \var{offset} simulando il
comportamento di \func{adjtime}.\\
dell'orologio secondo il valore del
campo \var{offset} simulando il
comportamento di \func{adjtime}.\\
zone} corrente; \func{ctime} è banalmente definita in termini di
\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
zone} corrente; \func{ctime} è banalmente definita in termini di
\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
permette di tenere conto anche della differenza fra tempo universale e ora
locale, compresa l'eventuale ora legale. Questo viene fatto attraverso le tre
variabili globali mostrate in \figref{fig:sys_tzname}, cui si accede quando si
permette di tenere conto anche della differenza fra tempo universale e ora
locale, compresa l'eventuale ora legale. Questo viene fatto attraverso le tre
variabili globali mostrate in \figref{fig:sys_tzname}, cui si accede quando si
delle precedenti funzioni di conversione, oppure invocando direttamente la
funzione \func{tzset}, il cui prototipo è:
\begin{prototype}{sys/timex.h}
{void tzset(void)}
delle precedenti funzioni di conversione, oppure invocando direttamente la
funzione \func{tzset}, il cui prototipo è:
\begin{prototype}{sys/timex.h}
{void tzset(void)}
restituiti dalle funzioni. Il programma di esempio \cmd{errcode} stampa il
codice relativo ad un valore numerico con l'opzione \cmd{-l}.
restituiti dalle funzioni. Il programma di esempio \cmd{errcode} stampa il
codice relativo ad un valore numerico con l'opzione \cmd{-l}.
-Il valore di \var{errno} viene sempre settato a zero all'avvio di un
-programma, gran parte delle funzioni di libreria settano \var{errno} ad un
+Il valore di \var{errno} viene sempre impostato a zero all'avvio di un
+programma, gran parte delle funzioni di libreria impostano \var{errno} ad un
valore diverso da zero in caso di errore. Il valore è invece indefinito in
caso di successo, perché anche se una funzione ha successo, può chiamarne
altre al suo interno che falliscono, modificando così \var{errno}.
valore diverso da zero in caso di errore. Il valore è invece indefinito in
caso di successo, perché anche se una funzione ha successo, può chiamarne
altre al suo interno che falliscono, modificando così \var{errno}.
\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
\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
per il fatto che, separati con il solito due punti-spazio, vengono inseriti un
nome di file indicato da \param{fname} ed un numero di linea subito dopo la
stampa del nome del programma. Inoltre essa usa un'altra variabile globale,
per il fatto che, separati con il solito due punti-spazio, vengono inseriti un
nome di file indicato da \param{fname} ed un numero di linea subito dopo la
stampa del nome del programma. Inoltre essa usa un'altra variabile globale,