X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=f6e6d50d0e31728fc10ae938fed98292ef6fdf0e;hp=a8852c09dc4ed08bebf2226f4eb9588fbf07fb47;hb=5a59e67204ff436dceb6a13ed39e876aea3945a8;hpb=76c815519021c83247a87d9f4318fc4aaa533f56 diff --git a/system.tex b/system.tex index a8852c0..f6e6d50 100644 --- a/system.tex +++ b/system.tex @@ -75,7 +75,7 @@ vedere per la maggior parte questi limiti attengono alle dimensioni dei dati 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 -costante, \macro{FOPEN\_MAX}, che può non essere fissa e che pertanto non è +costante, \const{FOPEN\_MAX}, che può non essere fissa e che pertanto non è definita in \file{limits.h}; essa deve essere definita in \file{stdio.h} ed avere un valore minimo di 8. @@ -87,23 +87,23 @@ avere un valore minimo di 8. \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \macro{MB\_LEN\_MAX}& 16 & massima dimensione di un + \const{MB\_LEN\_MAX}& 16 & massima dimensione di un carattere esteso\\ - \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}\\ \hline \end{tabular} \caption{Costanti definite in \file{limits.h} in conformità allo standard @@ -111,10 +111,10 @@ avere un valore minimo di 8. \label{tab:sys_ansic_macro} \end{table} -\footnotetext[1]{il valore può essere 0 o \macro{SCHAR\_MIN} a seconda che il +\footnotetext[1]{il valore può essere 0 o \const{SCHAR\_MIN} a seconda che il sistema usi caratteri con segno o meno.} -\footnotetext[2]{il valore può essere \macro{UCHAR\_MAX} o \macro{SCHAR\_MAX} +\footnotetext[2]{il valore può essere \const{UCHAR\_MAX} o \const{SCHAR\_MAX} 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 @@ -129,9 +129,9 @@ A questi valori lo standard ISO C90 ne aggiunge altri tre, relativi al tipo \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \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& massimo di \ctyp{unsigned long long}\\ \hline \end{tabular} @@ -162,21 +162,21 @@ file, riportate in \tabref{tab:sys_file_macro}). \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \macro{ARG\_MAX} &131072& dimensione massima degli argomenti + \const{ARG\_MAX} &131072& dimensione massima degli argomenti passati ad una funzione della famiglia \func{exec}.\\ - \macro{CHILD\_MAX} & 999& numero massimo di processi contemporanei + \const{CHILD\_MAX} & 999& numero massimo di processi contemporanei che un utente può eseguire.\\ - \macro{OPEN\_MAX} & 256& numero massimo di file che un processo + \const{OPEN\_MAX} & 256& numero massimo di file che un processo può mantenere aperti in contemporanea.\\ - \macro{STREAM\_MAX}& 8& massimo numero di stream aperti per + \const{STREAM\_MAX}& 8& massimo numero di stream aperti per processo in contemporanea.\\ - \macro{TZNAME\_MAX}& 6& dimensione massima del nome di una + \const{TZNAME\_MAX}& 6& dimensione massima del nome di una \texttt{timezone} (vedi \secref{sec:sys_time_base})).\\ - \macro{NGROUPS\_MAX}& 32& numero di gruppi supplementari per + \const{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}.\\ + \const{SSIZE\_MAX}&32767& valore massimo del tipo \type{ssize\_t}.\\ \hline \hline \end{tabular} @@ -189,7 +189,7 @@ quando i valori a cui fanno riferimento sono fissi, e altrimenti devono essere 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 -assumere valori molto elevati (come \macro{CHILD\_MAX}), e non è pertanto il +assumere valori molto elevati (come \const{CHILD\_MAX}), e non è pertanto il caso di utilizzarli per allocare staticamente della memoria. A complicare la faccenda si aggiunge il fatto che POSIX.1 prevede una serie di @@ -206,27 +206,27 @@ riportati in \tabref{tab:sys_posix1_general}. \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \macro{\_POSIX\_ARG\_MAX} & 4096& dimensione massima degli argomenti + \const{\_POSIX\_ARG\_MAX} & 4096& dimensione massima degli argomenti passati ad una funzione della famiglia \func{exec}.\\ - \macro{\_POSIX\_CHILD\_MAX} & 6& numero massimo di processi + \const{\_POSIX\_CHILD\_MAX} & 6& numero massimo di processi contemporanei che un utente può eseguire.\\ - \macro{\_POSIX\_OPEN\_MAX} & 16& numero massimo di file che un processo + \const{\_POSIX\_OPEN\_MAX} & 16& numero massimo di file che un processo può mantenere aperti in contemporanea.\\ - \macro{\_POSIX\_STREAM\_MAX} & 8& massimo numero di stream aperti per + \const{\_POSIX\_STREAM\_MAX} & 8& massimo numero di stream aperti per processo in contemporanea.\\ - \macro{\_POSIX\_TZNAME\_MAX} & & dimensione massima del nome di una + \const{\_POSIX\_TZNAME\_MAX} & & dimensione massima del nome di una \texttt{timezone} (vedi \secref{sec:sys_date}). \\ - \macro{\_POSIX\_NGROUPS\_MAX}& 0& numero di gruppi supplementari per + \const{\_POSIX\_NGROUPS\_MAX}& 0& numero di gruppi supplementari per processo (vedi \secref{sec:proc_access_id}).\\ - \macro{\_POSIX\_SSIZE\_MAX} &32767& valore massimo del tipo + \const{\_POSIX\_SSIZE\_MAX} &32767& valore massimo del tipo \type{ssize\_t}.\\ - \macro{\_POSIX\_AIO\_LISTIO\_MAX}&2& \\ - \macro{\_POSIX\_AIO\_MAX} & 1& \\ + \const{\_POSIX\_AIO\_LISTIO\_MAX}&2& \\ + \const{\_POSIX\_AIO\_MAX} & 1& \\ \hline \hline \end{tabular} @@ -249,14 +249,14 @@ valori ottenuti da \func{sysconf}. \textbf{Macro}&\textbf{Significato}\\ \hline \hline - \macro{\_POSIX\_JOB\_CONTROL}& il sistema supporta il + \const{\_POSIX\_JOB\_CONTROL}& il sistema supporta il \textit{job control} (vedi \secref{sec:sess_job_control}).\\ - \macro{\_POSIX\_SAVED\_IDS} & il sistema supporta gli identificatori del + \const{\_POSIX\_SAVED\_IDS} & il sistema supporta gli identificatori del gruppo \textit{saved} (vedi \secref{sec:proc_access_id}) per il controllo di accesso dei processi\\ - \macro{\_POSIX\_VERSION} & fornisce la versione dello standard POSIX.1 + \const{\_POSIX\_VERSION} & fornisce la versione dello standard POSIX.1 supportata nel formato YYYYMML (ad esempio 199009L).\\ \hline @@ -316,37 +316,37 @@ relative spiegazioni, si pu \textbf{Parametro}&\textbf{Macro sostituita} &\textbf{Significato}\\ \hline \hline - \texttt{\_SC\_ARG\_MAX} &\macro{ARG\_MAX}& + \texttt{\_SC\_ARG\_MAX} &\const{ARG\_MAX}& La dimensione massima degli argomenti passati ad una funzione della famiglia \func{exec}.\\ - \texttt{\_SC\_CHILD\_MAX}&\macro{\_CHILD\_MAX}& + \texttt{\_SC\_CHILD\_MAX}&\const{\_CHILD\_MAX}& Il numero massimo di processi contemporanei che un utente può eseguire.\\ - \texttt{\_SC\_OPEN\_MAX}&\macro{\_OPEN\_MAX}& + \texttt{\_SC\_OPEN\_MAX}&\const{\_OPEN\_MAX}& Il numero massimo di file che un processo può mantenere aperti in contemporanea.\\ - \texttt{\_SC\_STREAM\_MAX}& \macro{STREAM\_MAX}& + \texttt{\_SC\_STREAM\_MAX}& \const{STREAM\_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}.\\ - \texttt{\_SC\_TZNAME\_MAX}&\macro{TZNAME\_MAX}& + \texttt{\_SC\_TZNAME\_MAX}&\const{TZNAME\_MAX}& La dimensione massima di un nome di una \texttt{timezone} (vedi \secref{sec:sys_date}).\\ - \texttt{\_SC\_NGROUPS\_MAX}&\macro{NGROUP\_MAX}& + \texttt{\_SC\_NGROUPS\_MAX}&\const{NGROUP\_MAX}& Massimo numero di gruppi supplementari che può avere un processo (vedi \secref{sec:proc_access_id}).\\ - \texttt{\_SC\_SSIZE\_MAX}&\macro{SSIZE\_MAX}& + \texttt{\_SC\_SSIZE\_MAX}&\const{SSIZE\_MAX}& valore massimo del tipo di dato \type{ssize\_t}.\\ - \texttt{\_SC\_CLK\_TCK}& \macro{CLK\_TCK} & + \texttt{\_SC\_CLK\_TCK}& \const{CLK\_TCK} & Il numero di \textit{clock tick} al secondo, cioè l'unità di misura del \textit{process time} (vedi \secref{sec:sys_unix_time}).\\ - \texttt{\_SC\_JOB\_CONTROL}&\macro{\_POSIX\_JOB\_CONTROL}& + \texttt{\_SC\_JOB\_CONTROL}&\const{\_POSIX\_JOB\_CONTROL}& Indica se è supportato il \textit{job control} (vedi \secref{sec:sess_job_control}) in stile POSIX.\\ - \texttt{\_SC\_SAVED\_IDS}&\macro{\_POSIX\_SAVED\_IDS}& + \texttt{\_SC\_SAVED\_IDS}&\const{\_POSIX\_SAVED\_IDS}& Indica se il sistema supporta i \textit{saved id} (vedi \secref{sec:proc_access_id}).\\ - \texttt{\_SC\_VERSION}& \macro{\_POSIX\_VERSION} & + \texttt{\_SC\_VERSION}& \const{\_POSIX\_VERSION} & 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.\\ @@ -403,14 +403,14 @@ riportate in \tabref{tab:sys_file_macro}. \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \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 (vedi \secref{sec:ipc_pipes}).\\ - \macro{MAX\_CANON}&255 & dimensione di una riga di terminale in modo + \const{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 + \const{MAX\_INPUT}&255 & spazio disponibile nella coda di input del terminale (vedi \secref{sec:term_design}).\\ \hline \end{tabular} @@ -432,19 +432,19 @@ analoghe di \tabref{tab:sys_posix1_general}. \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \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 pipe.\\ - \macro{\_POSIX\_MAX\_CANON}&255 & dimensione di una riga di + \const{\_POSIX\_MAX\_CANON}&255 & dimensione di una riga di terminale in modo canonico.\\ - \macro{\_POSIX\_MAX\_INPUT}&255 & spazio disponibile nella coda di input + \const{\_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 & \\ -% \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 & \\ \hline \end{tabular} \caption{Macro dei valori minimi delle caratteristiche dei file per la @@ -498,7 +498,7 @@ suo prototipo 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} assumerà il valore \macro{EFAULT}.} + fallimento, nel qual caso \var{errno} assumerà il valore \const{EFAULT}.} \end{prototype} La funzione, che viene usata dal comando \cmd{uname}, restituisce le @@ -516,7 +516,7 @@ indicano rispettivamente: \end{itemize*} l'ultima informazione è stata aggiunta di recente e non è prevista dallo standard POSIX, essa è accessibile, come mostrato in \figref{fig:sys_utsname}, -solo definendo \macro{\_GNU\_SOURCE}. +solo definendo \const{\_GNU\_SOURCE}. \begin{figure}[!htb] \footnotesize \centering @@ -541,11 +541,11 @@ struct utsname { 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 @@ -587,21 +587,21 @@ 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} 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 \param{name}. -% \item[\macro{EFAULT}] si è specificato \param{oldlenp} zero quando +% \item[\errcode{EFAULT}] si è specificato \param{oldlenp} zero quando % \param{oldval} è non nullo. - \item[\macro{EINVAL}] o si è specificato un valore non valido per il + \item[\errcode{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. - \item[\macro{ENOMEM}] talvolta viene usato più correttamente questo errore + \item[\errcode{ENOMEM}] talvolta viene usato più correttamente questo errore quando non si è specificato sufficiente spazio per ricevere il valore di un parametro. \end{errlist} - ed inoltre \macro{EFAULT}. + ed inoltre \const{EFAULT}. } \end{functions} @@ -698,29 +698,29 @@ sulla directory \param{target}. 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 nel kernel. - \item[\macro{ENOTBLK}] non si è usato un \textit{block device} per + \item[\errcode{ENOTBLK}] non si è usato un \textit{block device} per \param{source} quando era richiesto. - \item[\macro{EBUSY}] \param{source} è già montato, o non può essere + \item[\errcode{EBUSY}] \param{source} è già montato, o non può essere rimontato in read-only perché ci sono ancora file aperti in scrittura, o \param{target} è ancora in uso. - \item[\macro{EINVAL}] il device \param{source} presenta un + \item[\errcode{EINVAL}] il device \param{source} presenta un \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} è sbagliato. - \item[\macro{EMFILE}] la tabella dei device \textit{dummy} è piena. + \item[\errcode{EMFILE}] la tabella dei device \textit{dummy} è piena. \end{errlist} - 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} La funzione monta sulla directory \param{target}, detta \textit{mount point}, @@ -761,10 +761,10 @@ montaggio con l'argomento \param{mountflags}. 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 - costante \macro{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags} + costante \const{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 -vanno impostati con un OR aritmetico della costante \macro{MS\_MGC\_VAL} con i +vanno impostati con un OR aritmetico della costante \const{MS\_MGC\_VAL} con i valori riportati in \tabref{tab:sys_mount_flags}. \begin{table}[htb] @@ -775,24 +775,24 @@ valori riportati in \tabref{tab:sys_mount_flags}. \textbf{Parametro} & \textbf{Valore}&\textbf{Significato}\\ \hline \hline - \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 \secref{sec:file_mand_locking})\\ - \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 mode} (vedi \secref{sec:file_sharing})\\ - \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 \secref{sec:file_file_times})\\ - \macro{MS\_NODIRATIME}&2048 & non aggiorna gli \textit{access time} delle + \const{MS\_NODIRATIME}&2048 & non aggiorna gli \textit{access time} delle directory\\ - \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 \\ \hline \end{tabular} \caption{Tabella dei codici dei flag di montaggio di un filesystem.} @@ -807,7 +807,7 @@ La funzione \func{mount} pu \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 -bit di \param{mountflags}, \macro{MS\_REMOUNT}, che se impostato specifica che +bit di \param{mountflags}, \const{MS\_REMOUNT}, che se impostato specifica che 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. @@ -821,12 +821,12 @@ Una volta che non si voglia pi \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 processo, o contiene dei file aperti, o un altro mount point. \end{errlist} - 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 è @@ -841,7 +841,7 @@ Si tenga presente che la funzione fallisce quando il filesystem \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 -restituito è \macro{EBUSY}. +restituito è \errcode{EBUSY}. Linux provvede inoltre una seconda funzione, \func{umount2}, che in alcuni casi permette di forzare lo smontaggio di un filesystem, anche quando questo @@ -853,11 +853,11 @@ risulti occupato; il suo prototipo \end{prototype} Il valore di \param{flags} è una maschera binaria, e al momento l'unico valore -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, -evitando l'errore di \macro{EBUSY}. In tutti i casi prima dello smontaggio +evitando l'errore di \errcode{EBUSY}. In tutti i casi prima dello smontaggio viene eseguita una sincronizzazione dei dati. Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD, @@ -876,12 +876,12 @@ informazioni riguardo al filesystem su cui si trova un certo file, sono \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{ENOSYS}] il filesystem su cui si trova il file specificato non + \item[\errcode{ENOSYS}] il filesystem su cui si trova il file specificato non supporta la funzione. \end{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}.} \end{functions} Queste funzioni permettono di ottenere una serie di informazioni generali @@ -967,7 +967,7 @@ funzioni, \func{getpwuid} e \func{getpwnam}, i cui prototipi sono: Restituiscono le informazioni relative all'utente specificato. \bodydesc{Le funzioni ritornano il puntatore alla struttura contenente le - informazioni in caso di successo e \macro{NULL} nel caso non sia stato + informazioni in caso di successo e \val{null} nel caso non sia stato trovato nessun utente corrispondente a quanto specificato.} \end{functions} @@ -1031,10 +1031,10 @@ mentre la memoria allocata all'indirizzo \param{buffer}, per un massimo di \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 -l'utente esista, o \macro{NULL} altrimenti. Qualora i dati non possano essere +l'utente esista, o \val{null} altrimenti. Qualora i dati non possano essere contenuti nei byte specificati da \param{buflen}, la funzione fallirà -restituendo \macro{ERANGE} (e \param{result} sarà comunque impostato a -\macro{NULL}). +restituendo \errcode{ERANGE} (e \param{result} sarà comunque impostato a +\val{null}). Del tutto analoghe alle precedenti sono le funzioni \func{getgrnam} e \func{getgrgid} (e le relative analoghe rientranti con la stessa estensione @@ -1194,12 +1194,12 @@ sono: \end{functions} In caso questo non venga specificato nessun file viene usato il valore -standard \macro{\_PATH\_UTMP} (che è definito in \file{paths.h}); in genere +standard \const{\_PATH\_UTMP} (che è definito in \file{paths.h}); in genere \func{utmpname} prevede due possibili valori: \begin{basedescript}{\desclabelwidth{2.0cm}} -\item[\macro{\_PATH\_UTMP}] Specifica il database di accounting per gli utenti +\item[\const{\_PATH\_UTMP}] Specifica il database di accounting per gli utenti correntemente collegati. -\item[\macro{\_PATH\_WTMP}] Specifica il database di accounting per l'archivio +\item[\const{\_PATH\_WTMP}] Specifica il database di accounting per l'archivio storico degli utenti collegati. \end{basedescript} corrispondenti ai file \file{/var/run/utmp} e \file{/var/log/wtmp} visti in @@ -1225,7 +1225,7 @@ una voce con le funzioni \func{getutent}, \func{getutid}, \func{getutline} e Scrive una voce nel database. \bodydesc{Le funzioni ritornano il puntatore ad una struttura \var{utmp} in - caso di successo e \macro{NULL} in caso di errore.} + caso di successo e \val{null} in caso di errore.} \end{functions} Tutte queste funzioni fanno riferimento ad una struttura di tipo \var{utmp}, @@ -1265,10 +1265,10 @@ struct utmp 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}, verrà restituito la prima voce che corrisponde al tipo determinato; quando -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 corrispondente al valore del campo \var{ut\_id} specificato in \param{ut}. \begin{table}[htb] @@ -1279,18 +1279,18 @@ corrispondente al valore del campo \var{ut\_id} specificato in \param{ut}. \textbf{Funzione} & \textbf{Significato}\\ \hline \hline - \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 sistema. \\ - \macro{NEW\_TIME} & Identifica da quanto è stato modificato il + \const{NEW\_TIME} & Identifica da quanto è stato modificato il sistema. \\ - \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} & ??? \\ \hline \end{tabular} \caption{Classificazione delle voci del database di accounting a seconda dei @@ -1299,7 +1299,7 @@ corrispondente al valore del campo \var{ut\_id} specificato in \param{ut}. \end{table} La funzione \func{getutline} esegue la ricerca sulle voci che hanno -\var{ut\_type} uguale a \macro{LOGIN\_PROCESS} o \macro{USER\_PROCESS}, +\var{ut\_type} uguale a \const{LOGIN\_PROCESS} o \const{USER\_PROCESS}, 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 @@ -1344,7 +1344,7 @@ prototipi sono: specificati. \bodydesc{Le funzioni ritornano il puntatore ad una struttura \var{utmp} in - caso di successo e \macro{NULL} in caso di errore.} + caso di successo e \val{null} in caso di errore.} \end{functions} La prima funzione permette l'aggiunta di una voce a \file{wmtp} specificando @@ -1438,13 +1438,13 @@ funzione \func{getrusage}, il cui prototipo \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore, - nel qual caso \var{errno} può essere \macro{EINVAL} o \macro{EFAULT}.} + nel qual caso \var{errno} può essere \const{EINVAL} o \const{EFAULT}.} \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 è ricevuto lo stato di terminazione. @@ -1505,11 +1505,11 @@ prototipi sono: \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 cercato di innalzare i propri limiti. \end{errlist} - ed \macro{EFAULT}.} + ed \const{EFAULT}.} \end{functions} Entrambe le funzioni permettono di specificare su quale risorsa si vuole @@ -1525,39 +1525,39 @@ specificarne i valori. \textbf{Valore} & \textbf{Significato}\\ \hline \hline - \macro{RLIMIT\_CPU} & Il massimo tempo di CPU che il processo può + \const{RLIMIT\_CPU} & Il massimo tempo di CPU che il processo può usare. Il superamento del limite comporta - 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 può usare. Se il processo cerca di scrivere oltre questa dimensione riceverà un segnale di - \macro{SIGXFSZ}.\\ - \macro{RLIMIT\_DATA} & La massima dimensione della memoria dati di un + \const{SIGXFSZ}.\\ + \const{RLIMIT\_DATA} & La massima dimensione della memoria dati di un processo. Il tentativo di allocare più memoria causa il fallimento della funzione di allocazione. \\ - \macro{RLIMIT\_STACK} & La massima dimensione dello stack del + \const{RLIMIT\_STACK} & La massima dimensione dello stack del processo. Se il processo esegue operazioni che estendano lo stack oltre questa dimensione - 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\\ - \macro{RLIMIT\_RSS} & L'ammontare massimo di memoria fisica dato al + \const{RLIMIT\_RSS} & L'ammontare massimo di memoria fisica dato al processo. Il limite è solo una indicazione per il kernel, qualora ci fosse un surplus di memoria questa verrebbe assegnata.\\ - \macro{RLIMIT\_NPROC} & Il numero massimo di processi che possono essere + \const{RLIMIT\_NPROC} & Il numero massimo di processi che possono essere creati sullo stesso user id. Se il limite viene raggiunto \func{fork} fallirà con un - \macro{EAGAIN}.\\ - \macro{RLIMIT\_NOFILE} & Il numero massimo di file che il processo può + \errcode{EAGAIN}.\\ + \const{RLIMIT\_NOFILE} & Il numero massimo di file che il processo può aprire. L'apertura di un ulteriore file fallirà - 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 bloccata (vedi \secref{sec:proc_mem_lock}).\\ - \macro{RLIMIT\_AS} & La dimensione massima di tutta la memoria che il + \const{RLIMIT\_AS} & La dimensione massima di tutta la memoria che il processo può ottenere. Se il processo tenta di allocarne di più funzioni come \func{brk}, \func{malloc} o \func{mmap} falliranno. \\ @@ -1571,7 +1571,7 @@ specificarne i valori. \footnotetext{Impostare questo limite a zero è la maniera più semplice per evitare la creazione di \file{core} file.} -È inoltre definita la costante \macro{RLIM\_INFINITY} che permette di +È inoltre definita la costante \const{RLIM\_INFINITY} che permette di 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 @@ -1616,7 +1616,7 @@ La funzione 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 -\macro{PAGE\_SIZE} del kernel, anche se le versioni delle librerie del C +\const{PAGE\_SIZE} del kernel, anche se le versioni delle librerie del C precedenti le \acr{glibc} 2.1 implementavano questa funzione restituendo sempre un valore statico. @@ -1638,8 +1638,8 @@ informazioni riguardo la memoria; i loro prototipi sono: \end{functions} Queste funzioni sono equivalenti all'uso della funzione \func{sysconf} -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. @@ -1647,7 +1647,7 @@ Le \acr{glibc} supportano inoltre, come estensioni GNU, due funzioni che 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 -\macro{\_SC\_NPROCESSORS\_CONF} e \macro{\_SC\_NPROCESSORS\_ONLN}. +\const{\_SC\_NPROCESSORS\_CONF} e \const{\_SC\_NPROCESSORS\_ONLN}. Infine le \acr{glibc} riprendono da BSD la funzione \func{getloadavg} che permette di ottenere il carico di processore della macchina, in questo modo è @@ -1701,14 +1701,14 @@ secondo le definizioni: 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 - \macro{CLOCKS\_PER\_SEC}, che deve essere definita come 1000000, qualunque + \const{CLOCKS\_PER\_SEC}, che deve essere definita come 1000000, qualunque sia la risoluzione reale dell'orologio di sistema e la frequenza delle interruzioni del timer.\footnote{quest'ultima, come accennato in - \secref{sec:proc_hierarchy}, è invece data dalla costante \macro{HZ}.} Il + \secref{sec:proc_hierarchy}, è invece data dalla costante \const{HZ}.} 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 - vecchio simbolo \macro{CLK\_TCK} definito in \file{time.h} è ormai + vecchio simbolo \const{CLK\_TCK} definito in \file{time.h} è ormai considerato obsoleto. \end{description} @@ -1769,8 +1769,8 @@ utilizzato dallo stesso; il suo prototipo 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 @@ -1840,7 +1840,7 @@ in nel suddetto formato; il suo prototipo Legge il valore corrente del \textit{calendar time}. \bodydesc{La funzione ritorna il valore del \textit{calendar time} in caso - di successo e -1 in caso di errore, che può essere solo \macro{EFAULT}.} + di successo e -1 in caso di errore, che può essere solo \const{EFAULT}.} \end{prototype} \noindent dove \param{t}, se non nullo, deve essere l'indirizzo di una variabile su cui duplicare il valore di ritorno. @@ -1852,12 +1852,12 @@ sia necessario; il suo prototipo 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, - che può essere \macro{EFAULT} o \macro{EPERM}.} + che può essere \const{EFAULT} o \const{EPERM}.} \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, -altrimenti la chiamata fallirà con un errore di \macro{EPERM}. +altrimenti la chiamata fallirà con un errore di \errcode{EPERM}. 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 @@ -1882,8 +1882,8 @@ sono: \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 - \macro{EINVAL} \macro{EFAULT} e per \func{settimeofday} anche - \macro{EPERM}.} + \const{EINVAL} \const{EFAULT} e per \func{settimeofday} anche + \const{EPERM}.} \end{functions} Queste funzioni utilizzano una struttura di tipo \var{timeval}, la cui @@ -1925,22 +1925,22 @@ amministratore. Il secondo parametro di entrambe le funzioni 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}: -pertanto deve essere sempre impostato a \macro{NULL}. +pertanto deve essere sempre impostato a \val{null}. 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 - errore, nel qual caso \var{errno} assumerà il valore \macro{EPERM}.} + errore, nel qual caso \var{errno} assumerà il valore \errcode{EPERM}.} \end{prototype} Questa funzione permette di avere un aggiustamento graduale del tempo di @@ -1961,7 +1961,7 @@ modificare anche la velocit \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} - assumerà i valori \macro{EFAULT}, \macro{EINVAL} ed \macro{EPERM}.} + assumerà i valori \const{EFAULT}, \const{EINVAL} ed \const{EPERM}.} \end{prototype} La funzione richiede una struttura di tipo \var{timex}, la cui definizione, @@ -2023,37 +2023,38 @@ essere ritrovato in \cite{glibc}. \textbf{Nome} & \textbf{Valore} & \textbf{Significato}\\ \hline \hline - \macro{ADJ\_OFFSET} & 0x0001 & Imposta la differenza fra il tempo + \const{ADJ\_OFFSET} & 0x0001 & Imposta la differenza fra il tempo reale e l'orologio di sistema, che deve essere indicata in microsecondi nel campo \var{offset} di \var{timex}.\\ - \macro{ADJ\_FREQUENCY} & 0x0002 & Imposta la differenze in frequenza + \const{ADJ\_FREQUENCY} & 0x0002 & Imposta la differenze in frequenza fra il tempo reale e l'orologio di sistema, che deve essere indicata in parti per milione nel campo \var{frequency} di \var{timex}.\\ - \macro{ADJ\_MAXERROR} & 0x0004 & Imposta il valore massimo dell'errore + \const{ADJ\_MAXERROR} & 0x0004 & Imposta il valore massimo + dell'errore sul tempo, espresso in microsecondi nel campo \var{maxerror} di \var{timex}.\\ - \macro{ADJ\_ESTERROR} & 0x0008 & Imposta la stima dell'errore + \const{ADJ\_ESTERROR} & 0x0008 & Imposta la stima dell'errore sul tempo, espresso in microsecondi nel campo \var{esterror} di \var{timex}.\\ - \macro{ADJ\_STATUS} & 0x0010 & Imposta alcuni + \const{ADJ\_STATUS} & 0x0010 & Imposta alcuni 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, specificato nel campo \var{constant} di \var{timex}.\\ - \macro{ADJ\_TICK} & 0x4000 & Imposta il valore dei tick del timer + \const{ADJ\_TICK} & 0x4000 & Imposta il valore dei tick del timer in microsecondi, espresso nel campo \var{tick} di \var{timex}.\\ - \macro{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Imposta uno spostamento una tantum + \const{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Imposta uno spostamento una tantum dell'orologio secondo il valore del campo \var{offset} simulando il comportamento di \func{adjtime}.\\ @@ -2077,12 +2078,12 @@ sintassi specificata per la forma equivalente di questa funzione definita come \textbf{Nome} & \textbf{Valore} & \textbf{Significato}\\ \hline \hline - \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.\\ \hline \end{tabular} \caption{Possibili valori di ritorno di \func{adjtimex}.} @@ -2094,7 +2095,7 @@ sistema; questo pu \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 -amministratore si otterrà un errore di \macro{EPERM}. +amministratore si otterrà un errore di \errcode{EPERM}. \subsection{La gestione delle date.} @@ -2139,7 +2140,7 @@ struttura che si utilizza quando si deve specificare un tempo a partire dai 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 @@ -2168,7 +2169,7 @@ tempo in una stringa contenente data ed ora, i loro prototipi sono: Converte il \textit{broken-down time} in formato \type{time\_t}. \bodydesc{Tutte le funzioni restituiscono un puntatore al risultato in caso - di successo e \macro{NULL} in caso di errore, tranne che \func{mktime} che + di successo e \val{null} in caso di errore, tranne che \func{mktime} che restituisce direttamente il valore o -1 in caso di errore.} \end{functions} @@ -2178,8 +2179,8 @@ stringa, allocata staticamente, nella forma: \begin{verbatim} "Wed Jun 30 21:49:08 1993\n" \end{verbatim} -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 @@ -2215,7 +2216,7 @@ funzione \func{tzset}, il cui prototipo \end{prototype} La funzione inizializza le variabili di \figref{fig:sys_tzname} a partire dal -valore della variabile di ambiente \macro{TZ}, se quest'ultima non è definita +valore della variabile di ambiente \const{TZ}, se quest'ultima non è definita verrà usato il file \file{/etc/localtime}. \begin{figure}[!htb] @@ -2334,8 +2335,8 @@ controllare sempre che le funzioni chiamate si siano concluse correttamente. 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 @@ -2384,16 +2385,16 @@ prima funzione che si pu \param{errnum}. \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} 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 -errore sconosciuto, e la funzione restituirà come errore \macro{EINVAL}. La +errore sconosciuto, e la funzione restituirà come errore \errcode{EINVAL}. La funzione tiene conto del valore della variabile di ambiente -\macro{LC\_MESSAGES} per usare eventuali traduzioni dei messaggi d'errore +\const{LC\_MESSAGES} per usare eventuali traduzioni dei messaggi d'errore nella localizzazione presente. La funzione utilizza una stringa statica che non deve essere modificata dal @@ -2411,8 +2412,8 @@ thread (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 la stringa di descrizione.} \end{prototype} \noindent @@ -2420,8 +2421,8 @@ che utilizza un buffer che il singolo thread deve allocare, per evitare i 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 -\param{size}, nel qual caso la stringa sarebbe troncata e terminata con -\macro{NUL}. +\param{size}, nel qual caso la stringa sarebbe troncata e terminata con uno +zero (il carattere NUL). Una seconda funzione usata per riportare i codici di errore in maniera