interi, che sono in genere fissati dall'architettura hardware (le analoghe
informazioni per i dati in virgola mobile sono definite a parte, ed
accessibili includendo \file{float.h}). Lo standard prevede anche un'altra
interi, che sono in genere fissati dall'architettura hardware (le analoghe
informazioni per i dati in virgola mobile sono definite a parte, ed
accessibili includendo \file{float.h}). Lo standard prevede anche un'altra
definita in \file{limits.h}; essa deve essere definita in \file{stdio.h} ed
avere un valore minimo di 8.
definita in \file{limits.h}; essa deve essere definita in \file{stdio.h} ed
avere un valore minimo di 8.
- \macro{CHAR\_BIT} & 8 & bit di \ctyp{char}\\
- \macro{UCHAR\_MAX}& 255 & massimo di \ctyp{unsigned char}\\
- \macro{SCHAR\_MIN}& -128 & minimo di \ctyp{signed char}\\
- \macro{SCHAR\_MAX}& 127 & massimo di \ctyp{signed char}\\
- \macro{CHAR\_MIN} &\footnotemark& minimo di \ctyp{char}\\
- \macro{CHAR\_MAX} &\footnotemark& massimo di \ctyp{char}\\
- \macro{SHRT\_MIN} & -32768 & minimo di \ctyp{short}\\
- \macro{SHRT\_MAX} & 32767 & massimo di \ctyp{short}\\
- \macro{USHRT\_MAX}& 65535 & massimo di \ctyp{unsigned short}\\
- \macro{INT\_MAX} & 2147483647 & minimo di \ctyp{int}\\
- \macro{INT\_MIN} &-2147483648 & minimo di \ctyp{int}\\
- \macro{UINT\_MAX} & 4294967295 & massimo di \ctyp{unsigned int}\\
- \macro{LONG\_MAX} & 2147483647 & massimo di \ctyp{long}\\
- \macro{LONG\_MIN} &-2147483648 & minimo di \ctyp{long}\\
- \macro{ULONG\_MAX}& 4294967295 & massimo di \ctyp{unsigned long}\\
+ \const{CHAR\_BIT} & 8 & bit di \ctyp{char}\\
+ \const{UCHAR\_MAX}& 255 & massimo di \ctyp{unsigned char}\\
+ \const{SCHAR\_MIN}& -128 & minimo di \ctyp{signed char}\\
+ \const{SCHAR\_MAX}& 127 & massimo di \ctyp{signed char}\\
+ \const{CHAR\_MIN} &\footnotemark& minimo di \ctyp{char}\\
+ \const{CHAR\_MAX} &\footnotemark& massimo di \ctyp{char}\\
+ \const{SHRT\_MIN} & -32768 & minimo di \ctyp{short}\\
+ \const{SHRT\_MAX} & 32767 & massimo di \ctyp{short}\\
+ \const{USHRT\_MAX}& 65535 & massimo di \ctyp{unsigned short}\\
+ \const{INT\_MAX} & 2147483647 & minimo di \ctyp{int}\\
+ \const{INT\_MIN} &-2147483648 & minimo di \ctyp{int}\\
+ \const{UINT\_MAX} & 4294967295 & massimo di \ctyp{unsigned int}\\
+ \const{LONG\_MAX} & 2147483647 & massimo di \ctyp{long}\\
+ \const{LONG\_MIN} &-2147483648 & minimo di \ctyp{long}\\
+ \const{ULONG\_MAX}& 4294967295 & massimo di \ctyp{unsigned long}\\
a seconda che il sistema usi caratteri con segno o meno.}
A questi valori lo standard ISO C90 ne aggiunge altri tre, relativi al tipo
a seconda che il sistema usi caratteri con segno o meno.}
A questi valori lo standard ISO C90 ne aggiunge altri tre, relativi al tipo
- \macro{LLONG\_MAX}& 9223372036854775807& massimo di \ctyp{long long}\\
- \macro{LLONG\_MIN}&-9223372036854775808& minimo di \ctyp{long long}\\
- \macro{ULLONG\_MAX}&18446744073709551615&
+ \const{LLONG\_MAX}& 9223372036854775807& massimo di \ctyp{long long}\\
+ \const{LLONG\_MIN}&-9223372036854775808& minimo di \ctyp{long long}\\
+ \const{ULLONG\_MAX}&18446744073709551615&
lasciate indefinite, ed i loro valori dei limiti devono essere accessibili
solo attraverso \func{sysconf}. In realtà queste vengono sempre definite ad
un valore generico. Si tenga presente poi che alcuni di questi limiti possono
lasciate indefinite, ed i loro valori dei limiti devono essere accessibili
solo attraverso \func{sysconf}. In realtà queste vengono sempre definite ad
un valore generico. Si tenga presente poi che alcuni di questi limiti possono
caso di utilizzarli per allocare staticamente della memoria.
A complicare la faccenda si aggiunge il fatto che POSIX.1 prevede una serie di
caso di utilizzarli per allocare staticamente della memoria.
A complicare la faccenda si aggiunge il fatto che POSIX.1 prevede una serie di
gruppo \textit{saved} (vedi
\secref{sec:proc_access_id})
per il controllo di accesso dei processi\\
gruppo \textit{saved} (vedi
\secref{sec:proc_access_id})
per il controllo di accesso dei processi\\
Il massimo numero di stream che un processo può mantenere aperti in
contemporanea. Questo limite previsto anche dallo standard ANSI C, che
specifica la macro {FOPEN\_MAX}.\\
Il massimo numero di stream che un processo può mantenere aperti in
contemporanea. Questo limite previsto anche dallo standard ANSI C, che
specifica la macro {FOPEN\_MAX}.\\
Massimo numero di gruppi supplementari che può avere un processo (vedi
\secref{sec:proc_access_id}).\\
Massimo numero di gruppi supplementari che può avere un processo (vedi
\secref{sec:proc_access_id}).\\
Il numero di \textit{clock tick} al secondo, cioè l'unità di misura del
\textit{process time} (vedi \secref{sec:sys_unix_time}).\\
Il numero di \textit{clock tick} al secondo, cioè l'unità di misura del
\textit{process time} (vedi \secref{sec:sys_unix_time}).\\
Indica se è supportato il \textit{job control} (vedi
\secref{sec:sess_job_control}) in stile POSIX.\\
Indica se è supportato il \textit{job control} (vedi
\secref{sec:sess_job_control}) in stile POSIX.\\
Indica il mese e l'anno di approvazione della revisione dello standard
POSIX.1 a cui il sistema fa riferimento, nel formato YYYYMML, la
revisione più recente è 199009L, che indica il Settembre 1990.\\
Indica il mese e l'anno di approvazione della revisione dello standard
POSIX.1 a cui il sistema fa riferimento, nel formato YYYYMML, la
revisione più recente è 199009L, che indica il Settembre 1990.\\
- \macro{LINK\_MAX} &8 & numero massimo di link a un file\\
- \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
+ \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{PIPE\_BUF}&4096 & byte scrivibili atomicamente in una pipe
- \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 un pathname.\\
- \macro{\_POSIX\_PIPE\_BUF}& 512 & byte scrivibili atomicamente in una
+ \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\_PIPE\_BUF}& 512 & byte scrivibili atomicamente in una
-% \macro{\_POSIX\_MQ\_OPEN\_MAX}& 8& \\
-% \macro{\_POSIX\_MQ\_PRIO\_MAX}& 32& \\
-% \macro{\_POSIX\_FD\_SETSIZE}& 16 & \\
-% \macro{\_POSIX\_DELAYTIMER\_MAX}& 32 & \\
+% \const{\_POSIX\_MQ\_OPEN\_MAX}& 8& \\
+% \const{\_POSIX\_MQ\_PRIO\_MAX}& 32& \\
+% \const{\_POSIX\_FD\_SETSIZE}& 16 & \\
+% \const{\_POSIX\_DELAYTIMER\_MAX}& 32 & \\
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
\end{itemize*}
l'ultima informazione è stata aggiunta di recente e non è prevista dallo
standard POSIX, essa è accessibile, come mostrato in \figref{fig:sys_utsname},
\end{itemize*}
l'ultima informazione è stata aggiunta di recente e non è prevista dallo
standard POSIX, essa è accessibile, come mostrato in \figref{fig:sys_utsname},
In generale si tenga presente che le dimensioni delle stringe di una
\var{utsname} non è specificata, e che esse sono sempre terminate con
In generale si tenga presente che le dimensioni delle stringe di una
\var{utsname} non è specificata, e che esse sono sempre terminate con
-\macro{NULL}; il manuale delle \acr{glibc} indica due diverse dimensioni,
-\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.\footnote{Nel caso di Linux
+\val{null}; il manuale delle \acr{glibc} indica due diverse dimensioni,
+\const{\_UTSNAME\_LENGTH} per i campi standard e
+\const{\_UTSNAME\_DOMAIN\_LENGTH} per quello specifico per il nome di dominio;
+altri sistemi usano nomi diversi come \const{SYS\_NMLN} o \const{\_SYS\_NMLN}
+o \const{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
\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
\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \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
+ \item[\errcode{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[\errcode{ENOTDIR}] non esiste un parametro corrispondente al nome
parametro che si vuole impostare o lo spazio provvisto per il ritorno di un
valore non è delle giuste dimensioni.
parametro che si vuole impostare o lo spazio provvisto per il ritorno di un
valore non è delle giuste dimensioni.
fallimento, nel qual caso gli errori comuni a tutti i filesystem che possono
essere restituiti in \var{errno} sono:
\begin{errlist}
fallimento, nel qual caso gli errori comuni a tutti i filesystem che possono
essere restituiti in \var{errno} sono:
\begin{errlist}
- \item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
- \item[\macro{ENODEV}] \param{filesystemtype} non esiste o non è configurato
+ \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
+ \item[\errcode{ENODEV}] \param{filesystemtype} non esiste o non è configurato
rimontato in read-only perché ci sono ancora file aperti in scrittura, o
\param{target} è ancora in uso.
rimontato in read-only perché ci sono ancora file aperti in scrittura, o
\param{target} è ancora in uso.
\textit{superblock} non valido, o si è cercato di rimontare un filesystem
non ancora montato, o di montarlo senza che \param{target} sia un
\textit{mount point} o di spostarlo quando \param{target} non è un
\textit{mount point} o è \file{/}.
\textit{superblock} non valido, o si è cercato di rimontare un filesystem
non ancora montato, o di montarlo senza che \param{target} sia un
\textit{mount point} o di spostarlo quando \param{target} non è un
\textit{mount point} o è \file{/}.
- \item[\macro{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 \macro{MS\_NODEV}.
- \item[\macro{ENXIO}] il \textit{major number} del device \param{source} è
+ \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}.
+ \item[\errcode{ENXIO}] il \textit{major number} del device \param{source} è
- ed inoltre \macro{ENOTDIR}, \macro{EFAULT}, \macro{ENOMEM},
- \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.}
+ ed inoltre \const{ENOTDIR}, \const{EFAULT}, \const{ENOMEM},
+ \const{ENAMETOOLONG}, \const{ENOENT} o \const{ELOOP}.}
In Linux \param{mountflags} deve essere un intero a 32 bit i cui 16 più
significativi sono un \textit{magic number}\footnote{cioè un numero speciale
usato come identificativo, che nel caso è \code{0xC0ED}; si può usare la
In Linux \param{mountflags} deve essere un intero a 32 bit i cui 16 più
significativi sono un \textit{magic number}\footnote{cioè un numero speciale
usato come identificativo, che nel caso è \code{0xC0ED}; si può usare la
riservata al \textit{magic number}.} mentre i 16 meno significativi sono
usati per specificare le opzioni; essi sono usati come maschera binaria e
riservata al \textit{magic number}.} mentre i 16 meno significativi sono
usati per specificare le opzioni; essi sono usati come maschera binaria e
- \macro{MS\_RDONLY} & 1 & monta in sola lettura\\
- \macro{MS\_NOSUID} & 2 & ignora i bit \acr{suid} e \acr{sgid}\\
- \macro{MS\_NODEV} & 4 & impedisce l'accesso ai file di dispositivo\\
- \macro{MS\_NOEXEC} & 8 & impedisce di eseguire programmi \\
- \macro{MS\_SYNCHRONOUS}& 16 & abilita la scrittura sincrona \\
- \macro{MS\_REMOUNT} & 32 & rimonta il filesystem cambiando i flag\\
- \macro{MS\_MANDLOCK} & 64 & consente il \textit{mandatory locking} (vedi
+ \const{MS\_RDONLY} & 1 & monta in sola lettura\\
+ \const{MS\_NOSUID} & 2 & ignora i bit \acr{suid} e \acr{sgid}\\
+ \const{MS\_NODEV} & 4 & impedisce l'accesso ai file di dispositivo\\
+ \const{MS\_NOEXEC} & 8 & impedisce di eseguire programmi \\
+ \const{MS\_SYNCHRONOUS}& 16 & abilita la scrittura sincrona \\
+ \const{MS\_REMOUNT} & 32 & rimonta il filesystem cambiando i flag\\
+ \const{MS\_MANDLOCK} & 64 & consente il \textit{mandatory locking} (vedi
- \macro{S\_WRITE} & 128 & scrive normalmente \\
- \macro{S\_APPEND} & 256 & consente la scrittura solo in \textit{append
+ \const{S\_WRITE} & 128 & scrive normalmente \\
+ \const{S\_APPEND} & 256 & consente la scrittura solo in \textit{append
- \macro{S\_IMMUTABLE} & 512 & impedisce che si possano modificare i file \\
- \macro{MS\_NOATIME} &1024 & non aggiorna gli \textit{access time} (vedi
+ \const{S\_IMMUTABLE} & 512 & impedisce che si possano modificare i file \\
+ \const{MS\_NOATIME} &1024 & non aggiorna gli \textit{access time} (vedi
- \macro{MS\_BIND} &4096 & monta il filesystem altrove\\
- \macro{MS\_MOVE} &8192 & sposta atomicamente il punto di montaggio \\
+ \const{MS\_BIND} &4096 & monta il filesystem altrove\\
+ \const{MS\_MOVE} &8192 & sposta atomicamente il punto di montaggio \\
\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.
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
fallimento, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
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
+ \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
+ \item[\errcode{EBUSY}] \param{target} è la directory di lavoro di qualche
- ed inoltre \macro{ENOTDIR}, \macro{EFAULT}, \macro{ENOMEM},
- \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.}
+ ed inoltre \const{ENOTDIR}, \const{EFAULT}, \const{ENOMEM},
+ \const{ENAMETOOLONG}, \const{ENOENT} o \const{ELOOP}.}
\end{prototype}
\noindent la funzione prende il nome della directory su cui il filesystem è
montato e non il file o il dispositivo che è stato montato,\footnote{questo è
\end{prototype}
\noindent la funzione prende il nome della directory su cui il filesystem è
montato e non il file o il dispositivo che è stato montato,\footnote{questo è
\textsl{occupato}, questo avviene quando ci sono ancora file aperti sul
filesystem, se questo contiene la directory di lavoro corrente di un qualunque
processo o il mount point di un altro filesystem; in questo caso l'errore
\textsl{occupato}, questo avviene quando ci sono ancora file aperti sul
filesystem, se questo contiene la directory di lavoro corrente di un qualunque
processo o il mount point di un altro filesystem; in questo caso l'errore
Linux provvede inoltre una seconda funzione, \func{umount2}, che in alcuni
casi permette di forzare lo smontaggio di un filesystem, anche quando questo
Linux provvede inoltre una seconda funzione, \func{umount2}, che in alcuni
casi permette di forzare lo smontaggio di un filesystem, anche quando questo
-definito è il bit \macro{MNT\_FORCE}; gli altri bit devono essere nulli.
-Specificando \macro{MNT\_FORCE} la funzione cercherà di liberare il filesystem
+definito è il bit \const{MNT\_FORCE}; gli altri bit devono essere nulli.
+Specificando \const{MNT\_FORCE} la funzione cercherà di liberare il filesystem
anche se è occupato per via di una delle condizioni descritte in precedenza. A
seconda del tipo di filesystem alcune (o tutte) possono essere superate,
anche se è occupato per via di una delle condizioni descritte in precedenza. A
seconda del tipo di filesystem alcune (o tutte) possono essere superate,
viene eseguita una sincronizzazione dei dati.
Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD,
viene eseguita una sincronizzazione dei dati.
Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD,
\bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
\bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- e \macro{EFAULT} ed \macro{EIO} per entrambe, \macro{EBADF} per
- \func{fstatfs}, \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT},
- \macro{EACCES}, \macro{ELOOP} per \func{statfs}.}
+ e \const{EFAULT} ed \const{EIO} per entrambe, \const{EBADF} per
+ \func{fstatfs}, \const{ENOTDIR}, \const{ENAMETOOLONG}, \const{ENOENT},
+ \const{EACCES}, \const{ELOOP} per \func{statfs}.}
Restituiscono le informazioni relative all'utente specificato.
\bodydesc{Le funzioni ritornano il puntatore alla struttura contenente le
Restituiscono le informazioni relative all'utente specificato.
\bodydesc{Le funzioni ritornano il puntatore alla struttura contenente le
\param{buflen} byte, sarà utilizzata per contenere le stringhe puntate dai
campi di \param{password}. Infine all'indirizzo puntato da \param{result}
viene restituito il puntatore ai dati ottenuti, cioè \param{buffer} nel caso
\param{buflen} byte, sarà utilizzata per contenere le stringhe puntate dai
campi di \param{password}. Infine all'indirizzo puntato da \param{result}
viene restituito il puntatore ai dati ottenuti, cioè \param{buffer} nel caso
Del tutto analoghe alle precedenti sono le funzioni \func{getgrnam} e
\func{getgrgid} (e le relative analoghe rientranti con la stessa estensione
Del tutto analoghe alle precedenti sono le funzioni \func{getgrnam} e
\func{getgrgid} (e le relative analoghe rientranti con la stessa estensione
storico degli utenti collegati.
\end{basedescript}
corrispondenti ai file \file{/var/run/utmp} e \file{/var/log/wtmp} visti in
storico degli utenti collegati.
\end{basedescript}
corrispondenti ai file \file{/var/run/utmp} e \file{/var/log/wtmp} visti in
Scrive una voce nel database.
\bodydesc{Le funzioni ritornano il puntatore ad una struttura \var{utmp} in
Scrive una voce nel database.
\bodydesc{Le funzioni ritornano il puntatore ad una struttura \var{utmp} in
Con \func{getutid} si può cercare una voce specifica, a seconda del valore del
campo \var{ut\_type} dell'argomento \param{ut}. Questo può assumere i valori
riportati in \tabref{tab:sys_ut_type}, quando assume i valori
Con \func{getutid} si può cercare una voce specifica, a seconda del valore del
campo \var{ut\_type} dell'argomento \param{ut}. Questo può assumere i valori
riportati in \tabref{tab:sys_ut_type}, quando assume i valori
-\macro{RUN\_LVL}, \macro{BOOT\_TIME}, \macro{OLD\_TIME}, \macro{NEW\_TIME},
+\const{RUN\_LVL}, \const{BOOT\_TIME}, \const{OLD\_TIME}, \const{NEW\_TIME},
-invece assume i valori \macro{INIT\_PROCESS}, \macro{LOGIN\_PROCESS},
-\macro{USER\_PROCESS} o \macro{DEAD\_PROCESS} verrà restituita la prima voce
+invece assume i valori \const{INIT\_PROCESS}, \const{LOGIN\_PROCESS},
+\const{USER\_PROCESS} o \const{DEAD\_PROCESS} verrà restituita la prima voce
- \macro{EMPTY} & Non contiene informazioni valide. \\
- \macro{RUN\_LVL} & Identica il runlevel del sistema. \\
- \macro{BOOT\_TIME} & Identifica il tempo di avvio del sistema \\
- \macro{OLD\_TIME} & Identifica quando è stato modificato l'orologio di
+ \const{EMPTY} & Non contiene informazioni valide. \\
+ \const{RUN\_LVL} & Identica il runlevel del sistema. \\
+ \const{BOOT\_TIME} & Identifica il tempo di avvio del sistema \\
+ \const{OLD\_TIME} & Identifica quando è stato modificato l'orologio di
- \macro{INIT\_PROCESS} & Identifica un processo lanciato da \cmd{init}. \\
- \macro{LOGIN\_PROCESS}& Identifica un processo di login. \\
- \macro{USER\_PROCESS} & Identifica un processo utente. \\
- \macro{DEAD\_PROCESS} & Identifica un processo terminato. \\
- \macro{ACCOUNTING} & ??? \\
+ \const{INIT\_PROCESS} & Identifica un processo lanciato da \cmd{init}. \\
+ \const{LOGIN\_PROCESS}& Identifica un processo di login. \\
+ \const{USER\_PROCESS} & Identifica un processo utente. \\
+ \const{DEAD\_PROCESS} & Identifica un processo terminato. \\
+ \const{ACCOUNTING} & ??? \\
restituendo la prima che corrisponde al valore di \var{ut\_line}, che
specifica il device\footnote{espresso senza il \file{/dev/} iniziale.} di
terminale che interessa. Lo stesso criterio di ricerca è usato da
restituendo la prima che corrisponde al valore di \var{ut\_line}, che
specifica il device\footnote{espresso senza il \file{/dev/} iniziale.} di
terminale che interessa. Lo stesso criterio di ricerca è usato da
\end{functions}
L'argomento \param{who} permette di specificare il processo di cui si vuole
leggere l'uso delle risorse; esso può assumere solo i due valori
\end{functions}
L'argomento \param{who} permette di specificare il processo di cui si vuole
leggere l'uso delle risorse; esso può assumere solo i due valori
-\macro{RUSAGE\_SELF} per indicare il processo corrente e
-\macro{RUSAGE\_CHILDREN} per indicare l'insieme dei processi figli di cui si è
+\const{RUSAGE\_SELF} per indicare il processo corrente e
+\const{RUSAGE\_CHILDREN} per indicare l'insieme dei processi figli di cui si è
\bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
\bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
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
+ \item[\errcode{EINVAL}] I valori per \param{resource} non sono validi.
+ \item[\errcode{EPERM}] Un processo senza i privilegi di amministratore ha
- l'emissione di un segnale di \macro{SIGXCPU}.\\
- \macro{RLIMIT\_FSIZE} & La massima dimensione di un file che un processo
+ l'emissione di un segnale di \const{SIGXCPU}.\\
+ \const{RLIMIT\_FSIZE} & La massima dimensione di un file che un processo
- riceverà un segnale di \macro{SIGSEGV}.\\
- \macro{RLIMIT\_CORE} & La massima dimensione di un file di \textit{core
+ riceverà un segnale di \const{SIGSEGV}.\\
+ \const{RLIMIT\_CORE} & La massima dimensione di un file di \textit{core
dump} creato da un processo. Nel caso le
dimensioni dovessero essere maggiori il file non
verrebbe generato.\footnotemark\\
dump} creato da un processo. Nel caso le
dimensioni dovessero essere maggiori il file non
verrebbe generato.\footnotemark\\
processo. Il limite è solo una indicazione per
il kernel, qualora ci fosse un surplus di
memoria questa verrebbe assegnata.\\
processo. Il limite è solo una indicazione per
il kernel, qualora ci fosse un surplus di
memoria questa verrebbe assegnata.\\
- con un errore \macro{EMFILE}.\\
- \macro{RLIMIT\_MEMLOCK}& L'ammontare massimo di memoria che può essere
+ con un errore \errcode{EMFILE}.\\
+ \const{RLIMIT\_MEMLOCK}& L'ammontare massimo di memoria che può essere
processo può ottenere. Se il processo tenta di
allocarne di più funzioni come \func{brk},
\func{malloc} o \func{mmap} falliranno. \\
processo può ottenere. Se il processo tenta di
allocarne di più funzioni come \func{brk},
\func{malloc} o \func{mmap} falliranno. \\
\footnotetext{Impostare questo limite a zero è la maniera più semplice per
evitare la creazione di \file{core} file.}
\footnotetext{Impostare questo limite a zero è la maniera più semplice per
evitare la creazione di \file{core} file.}
sbloccare l'uso di una risorsa, ma solo un processo con i privilegi di
amministratore può innalzare un limite al di sopra del valore corrente del
limite massimo. Si tenga conto infine che tutti i limiti vengono ereditati dal
sbloccare l'uso di una risorsa, ma solo un processo con i privilegi di
amministratore può innalzare un limite al di sopra del valore corrente del
limite massimo. Si tenga conto infine che tutti i limiti vengono ereditati dal
standard la etichetta come obsoleta, mentre lo standard POSIX 1003.1-2001 la
ha eliminata. In Linux è implementata come una system call nelle architetture
in cui essa è necessaria, ed in genere restituisce il valore del simbolo
standard la etichetta come obsoleta, mentre lo standard POSIX 1003.1-2001 la
ha eliminata. In Linux è implementata come una system call nelle architetture
in cui essa è necessaria, ed in genere restituisce il valore del simbolo
-rispettivamente con i parametri \macro{\_SC\_PHYS\_PAGES} e
-\macro{\_SC\_AVPHYS\_PAGES}. La prima restituisce il numero totale di pagine
+rispettivamente con i parametri \const{\_SC\_PHYS\_PAGES} e
+\const{\_SC\_AVPHYS\_PAGES}. La prima restituisce il numero totale di pagine
corrispondenti alla RAM della macchina; la seconda invece la memoria
effettivamente disponibile per i processi.
corrispondenti alla RAM della macchina; la seconda invece la memoria
effettivamente disponibile per i processi.
restituiscono il numero di processori della macchina (e quello dei processori
attivi); anche queste sono informazioni comunque ottenibili attraverso
\func{sysconf} utilizzando rispettivamente i parametri
restituiscono il numero di processori della macchina (e quello dei processori
attivi); anche queste sono informazioni comunque ottenibili attraverso
\func{sysconf} utilizzando rispettivamente i parametri
Infine le \acr{glibc} riprendono da BSD la funzione \func{getloadavg} che
permette di ottenere il carico di processore della macchina, in questo modo è
Infine le \acr{glibc} riprendono da BSD la funzione \func{getloadavg} che
permette di ottenere il carico di processore della macchina, in questo modo è
Viene misurato in \textit{clock tick}. Un tempo questo corrispondeva al
numero di interruzioni effettuate dal timer di sistema, adesso lo standard
POSIX richiede che esso sia pari al valore della costante
Viene misurato in \textit{clock tick}. Un tempo questo corrispondeva al
numero di interruzioni effettuate dal timer di sistema, adesso lo standard
POSIX richiede che esso sia pari al valore della costante
sia la risoluzione reale dell'orologio di sistema e la frequenza delle
interruzioni del timer.\footnote{quest'ultima, come accennato in
sia la risoluzione reale dell'orologio di sistema e la frequenza delle
interruzioni del timer.\footnote{quest'ultima, come accennato in
dato primitivo usato per questo tempo è \type{clock\_t}, che ha quindi una
risoluzione del microsecondo. Il numero di tick al secondo può essere
ricavato anche attraverso \func{sysconf} (vedi \secref{sec:sys_sysconf}). Il
dato primitivo usato per questo tempo è \type{clock\_t}, che ha quindi una
risoluzione del microsecondo. Il numero di tick al secondo può essere
ricavato anche attraverso \func{sysconf} (vedi \secref{sec:sys_sysconf}). Il
La funzione restituisce il tempo in tick, quindi se si vuole il tempo in
secondi occorre moltiplicare il risultato per la costante
La funzione restituisce il tempo in tick, quindi se si vuole il tempo in
secondi occorre moltiplicare il risultato per la costante
-\macro{CLOCKS\_PER\_SEC}.\footnote{le \acr{glibc} seguono lo standard ANSI C,
- POSIX richiede che \macro{CLOCKS\_PER\_SEC} sia definito pari a 1000000
+\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
\type{clock\_t} viene rappresentato come intero a 32 bit, il che comporta un
valore massimo corrispondente a circa 72 minuti, dopo i quali il contatore
indipendentemente dalla risoluzione del timer di sistema.} In genere
\type{clock\_t} viene rappresentato come intero a 32 bit, il che comporta un
valore massimo corrispondente a circa 72 minuti, dopo i quali il contatore
Legge il valore corrente del \textit{calendar time}.
\bodydesc{La funzione ritorna il valore del \textit{calendar time} in caso
Legge il valore corrente del \textit{calendar time}.
\bodydesc{La funzione ritorna il valore del \textit{calendar time} in caso
\end{prototype}
\noindent dove \param{t}, se non nullo, deve essere l'indirizzo di una
variabile su cui duplicare il valore di ritorno.
\end{prototype}
\noindent dove \param{t}, se non nullo, deve essere l'indirizzo di una
variabile su cui duplicare il valore di ritorno.
Imposta a \param{t} il valore corrente del \textit{calendar time}.
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
Imposta a \param{t} il valore corrente del \textit{calendar time}.
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
\end{prototype}
\noindent dato che modificare l'ora ha un impatto su tutto il sistema
il cambiamento dell'orologio è una operazione privilegiata e questa funzione
può essere usata solo da un processo con i privilegi di amministratore,
\end{prototype}
\noindent dato che modificare l'ora ha un impatto su tutto il sistema
il cambiamento dell'orologio è una operazione privilegiata e questa funzione
può essere usata solo da un processo con i privilegi di amministratore,
Data la scarsa precisione nell'uso di \type{time\_t} (che ha una risoluzione
massima di un secondo) quando si devono effettuare operazioni sui tempi di
Data la scarsa precisione nell'uso di \type{time\_t} (che ha una risoluzione
massima di un secondo) quando si devono effettuare operazioni sui tempi di
\bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
caso di errore, nel qual caso \var{errno} può assumere i valori
\bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
caso di errore, nel qual caso \var{errno} può assumere i valori
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 è
-saltato. Per questo motivo la modalità più corretta per impostare l'ora è quella
-di usare la funzione \func{adjtime}, il cui prototipo è:
+saltato. Per questo motivo la modalità più corretta per impostare l'ora è
+quella di usare la funzione \func{adjtime}, il cui prototipo è:
\begin{prototype}{sys/time.h}
{int adjtime(const struct timeval *delta, struct timeval *olddelta)}
Aggiusta del valore \param{delta} l'orologio di sistema.
\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
\begin{prototype}{sys/time.h}
{int adjtime(const struct timeval *delta, struct timeval *olddelta)}
Aggiusta del valore \param{delta} l'orologio di sistema.
\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
\bodydesc{La funzione restituisce lo stato dell'orologio (un valore $>0$) in
caso di successo e -1 in caso di errore, nel qual caso \var{errno}
\bodydesc{La funzione restituisce lo stato dell'orologio (un valore $>0$) in
caso di successo e -1 in caso di errore, nel qual caso \var{errno}
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}.\\
- \macro{ADJ\_TIMECONST} & 0x0020 & Imposta la larghezza di banda del PLL
- implementato dal kernel,
+ \const{ADJ\_TIMECONST} & 0x0020 & Imposta la larghezza di banda del
+ PLL implementato dal kernel,
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}.\\
- \macro{TIME\_OK} & 0 & L'orologio è sincronizzato.\\
- \macro{TIME\_INS} & 1 & insert leap second.\\
- \macro{TIME\_DEL} & 2 & delete leap second.\\
- \macro{TIME\_OOP} & 3 & leap second in progress.\\
- \macro{TIME\_WAIT} & 4 & leap second has occurred.\\
- \macro{TIME\_BAD} & 5 & L'orologio non è sincronizzato.\\
+ \const{TIME\_OK} & 0 & L'orologio è sincronizzato.\\
+ \const{TIME\_INS} & 1 & insert leap second.\\
+ \const{TIME\_DEL} & 2 & delete leap second.\\
+ \const{TIME\_OOP} & 3 & leap second in progress.\\
+ \const{TIME\_WAIT} & 4 & leap second has occurred.\\
+ \const{TIME\_BAD} & 5 & L'orologio non è sincronizzato.\\
\tabref{tab:sys_adjtimex_return}. Un valore di -1 viene usato per riportare
un errore; al solito se si cercherà di modificare l'orologio di sistema
(specificando un \var{mode} diverso da zero) senza avere i privilegi di
\tabref{tab:sys_adjtimex_return}. Un valore di -1 viene usato per riportare
un errore; al solito se si cercherà di modificare l'orologio di sistema
(specificando un \var{mode} diverso da zero) senza avere i privilegi di
dati naturali (ora e data), dato che essa consente anche di trattare la
gestione del fuso orario e dell'ora legale.\footnote{in realtà i due campi
\var{tm\_gmtoff} e \var{tm\_zone} sono estensioni previste da BSD e dalle
dati naturali (ora e data), dato che essa consente anche di trattare la
gestione del fuso orario e dell'ora legale.\footnote{in realtà i due campi
\var{tm\_gmtoff} e \var{tm\_zone} sono estensioni previste da BSD e dalle
- \acr{glibc}, che, quando è definita \macro{\_BSD\_SOURCE}, hanno la forma in
+ \acr{glibc}, che, quando è definita \const{\_BSD\_SOURCE}, hanno la forma in
\figref{fig:sys_tm_struct}.}
Le funzioni per la gestione del \textit{broken-down time} sono varie e vanno
\figref{fig:sys_tm_struct}.}
Le funzioni per la gestione del \textit{broken-down time} sono varie e vanno
Converte il \textit{broken-down time} in formato \type{time\_t}.
\bodydesc{Tutte le funzioni restituiscono un puntatore al risultato in caso
Converte il \textit{broken-down time} in formato \type{time\_t}.
\bodydesc{Tutte le funzioni restituiscono un puntatore al risultato in caso
-e impostano anche la variabile \var{tzname} con l'informazione della \textit{time
- zone} corrente; \func{ctime} è banalmente definita in termini di
+e impostano anche la variabile \var{tzname} con l'informazione della
+\textit{time 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
sostitute rientranti, il cui nome è al solito ottenuto appendendo un
\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
In genere le funzioni di libreria usano un valore speciale per indicare che
c'è stato un errore. Di solito questo valore è -1 o un puntatore nullo o la
In genere le funzioni di libreria usano un valore speciale per indicare che
c'è stato un errore. Di solito questo valore è -1 o un puntatore nullo o la
-costante \macro{EOF} (a seconda della funzione); ma questo valore segnala solo
-che c'è stato un errore, non il tipo di errore.
+costante \val{EOF} (a seconda della funzione); ma questo valore segnala solo
+che c'è stato un errore, non il tipo di errore.
Per riportare il tipo di errore il sistema usa la variabile globale
\var{errno},\footnote{L'uso di una variabile globale può comportare alcuni
Per riportare il tipo di errore il sistema usa la variabile globale
\var{errno},\footnote{L'uso di una variabile globale può comportare alcuni
- errore in caso di successo e \macro{NULL} in caso di errore, nel qual caso
- \var{errno} assumerà il valore \macro{EINVAL} se si è specificato un
+ errore in caso di successo e \val{null} in caso di errore, nel qual caso
+ \var{errno} assumerà il valore \const{EINVAL} se si è specificato un
numero di errore non valido.}
\end{prototype}
In generale \func{strerror} viene usata passando \var{errno} come parametro;
nel caso si specifichi un codice sbagliato verrà restituito un messaggio di
numero di errore non valido.}
\end{prototype}
In generale \func{strerror} viene usata passando \var{errno} come parametro;
nel caso si specifichi un codice sbagliato verrà restituito un messaggio di
nella localizzazione presente.
La funzione utilizza una stringa statica che non deve essere modificata dal
nella localizzazione presente.
La funzione utilizza una stringa statica che non deve essere modificata dal
(compreso il terminatore) \param{size}.
\bodydesc{La funzione restituisce il puntatore alla stringa; in caso di
(compreso il terminatore) \param{size}.
\bodydesc{La funzione restituisce il puntatore alla stringa; in caso di
- errore \var{errno} oltre a \macro{EINVAL} può assumere anche il valore
- \macro{ERANGE} per indicare che non c'è sufficiente memoria per contenere
+ errore \var{errno} oltre a \const{EINVAL} può assumere anche il valore
+ \const{ERANGE} per indicare che non c'è sufficiente memoria per contenere
problemi connessi alla condivisione del buffer statico. La funzione
restituisce l'indirizzo della stringa usata, che può essere contenuta nel
buffer specificato da \param{buf}, per una lunghezza non superiore a
problemi connessi alla condivisione del buffer statico. La funzione
restituisce l'indirizzo della stringa usata, che può essere contenuta nel
buffer specificato da \param{buf}, per una lunghezza non superiore a