\hline
\const{LINK\_MAX} &8 & Numero massimo di link a un file.\\
\const{NAME\_MAX}& 14 & Lunghezza in byte di un nome di file. \\
- \const{PATH\_MAX}& 256 & Lunghezza in byte di un
- \itindex{pathname} \textit{pathname}.\\
+ \const{PATH\_MAX}& 256 & Lunghezza in byte di un \textit{pathname}.\\
\const{PIPE\_BUF}&4096 & Byte scrivibili atomicamente in una pipe
(vedi sez.~\ref{sec:ipc_pipes}).\\
\const{MAX\_CANON}&255 & Dimensione di una riga di terminale in modo
\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
- \itindex{pathname} \textit{pathname}.\\
+ \textit{pathname}.\\
\const{\_POSIX\_PIPE\_BUF}& 512 & Byte scrivibili atomicamente in una
pipe.\\
\const{\_POSIX\_MAX\_CANON}&255 & Dimensione di una riga di
a quale file si fa riferimento, dato che il valore del limite cercato può
variare a seconda del filesystem. Una seconda versione della funzione,
\funcd{fpathconf}, opera su un file descriptor invece che su un
-\itindex{pathname} \textit{pathname}. Il suo prototipo è:
+\textit{pathname}. Il suo prototipo è:
\begin{prototype}{unistd.h}{long fpathconf(int fd, int name)}
Restituisce il valore del parametro \param{name} per il file \param{fd}.
\bodydesc{È identica a \func{pathconf} solo che utilizza un file descriptor
- invece di un \itindex{pathname} \textit{pathname}; pertanto gli errori
- restituiti cambiano di conseguenza.}
+ invece di un \textit{pathname}; pertanto gli errori restituiti cambiano di
+ conseguenza.}
\end{prototype}
\noindent ed il suo comportamento è identico a quello di \func{pathconf}.
di Linux occorrerà includere anche i file \file{linux/unistd.h} e
\file{linux/sysctl.h}.} per accedere ad uno di essi occorre specificare un
cammino attraverso i vari nodi dell'albero, in maniera analoga a come avviene
-per la risoluzione di un \itindex{pathname} \textit{pathname} (da cui l'uso
-alternativo del filesystem \file{/proc}, che vedremo dopo).
+per la risoluzione di un \textit{pathname} (da cui l'uso alternativo del
+filesystem \file{/proc}, che vedremo dopo).
Ciascun nodo dell'albero è identificato da un valore intero, ed il cammino che
arriva ad identificare un parametro specifico è passato alla funzione
In particolare l'albero dei valori di \func{sysctl} viene presentato in forma
di file nella directory \file{/proc/sys}, cosicché è possibile accedervi
-specificando un \itindex{pathname} \textit{pathname} e leggendo e scrivendo sul
-file corrispondente al parametro scelto. Il kernel si occupa di generare al
-volo il contenuto ed i nomi dei file corrispondenti, e questo ha il grande
+specificando un \textit{pathname} e leggendo e scrivendo sul file
+corrispondente al parametro scelto. Il kernel si occupa di generare al volo
+il contenuto ed i nomi dei file corrispondenti, e questo ha il grande
vantaggio di rendere accessibili i vari parametri a qualunque comando di shell
e di permettere la navigazione dell'albero dei valori.
informazioni degli utenti e dei gruppi per insiemi di macchine, in modo da
mantenere coerenti i dati, ha portato anche alla necessità di poter recuperare
e memorizzare dette informazioni su supporti diversi, introducendo il sistema
-del \itindex{Name~Service~Switch} \textit{Name Service Switch} che tratteremo
-brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la maggior
-parte delle sua applicazioni sono relative alla risoluzioni di nomi di rete.
+del \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} che
+tratteremo brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la
+maggior parte delle sua applicazioni sono relative alla risoluzioni di nomi di
+rete.
In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche
per la lettura delle informazioni relative a utenti e gruppi tralasciando
Le funzioni viste finora sono in grado di leggere le informazioni sia
direttamente dal file delle password in \conffile{/etc/passwd} che tramite il
-sistema del \itindex{Name~Service~Switch} \textit{Name Service Switch} e sono
-completamente generiche. Si noti però che non c'è una funzione che permetta di
-impostare direttamente una password.\footnote{in realtà questo può essere
- fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che POSIX non
-prevede questa possibilità esiste un'altra interfaccia che lo fa, derivata da
-SVID le cui funzioni sono riportate in tab.~\ref{tab:sys_passwd_func}. Questa
-però funziona soltanto quando le informazioni sono mantenute su un apposito
-file di \textsl{registro} di utenti e gruppi, con il formato classico di
-\conffile{/etc/passwd} e \conffile{/etc/group}.
+sistema del \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} e
+sono completamente generiche. Si noti però che non c'è una funzione che
+permetta di impostare direttamente una password.\footnote{in realtà questo può
+ essere fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che
+POSIX non prevede questa possibilità esiste un'altra interfaccia che lo fa,
+derivata da SVID le cui funzioni sono riportate in
+tab.~\ref{tab:sys_passwd_func}. Questa però funziona soltanto quando le
+informazioni sono mantenute su un apposito file di \textsl{registro} di utenti
+e gruppi, con il formato classico di \conffile{/etc/passwd} e
+\conffile{/etc/group}.
\begin{table}[htb]
\footnotesize
\textbf{Funzione} & \textbf{Significato}\\
\hline
\hline
- \func{fgetpwent} & Legge una voce dal file di registro degli utenti
+ \funcm{fgetpwent} & Legge una voce dal file di registro degli utenti
+ specificato.\\
+ \funcm{fgetpwent\_r}& Come la precedente, ma \index{funzioni!rientranti}
+ rientrante.\\
+ \funcm{putpwent} & Immette una voce in un file di registro degli
+ utenti.\\
+ \funcm{getpwent} & Legge una voce da \conffile{/etc/passwd}.\\
+ \funcm{getpwent\_r} & Come la precedente, ma \index{funzioni!rientranti}
+ rientrante.\\
+ \funcm{setpwent} & Ritorna all'inizio di \conffile{/etc/passwd}.\\
+ \funcm{endpwent} & Chiude \conffile{/etc/passwd}.\\
+ \funcm{fgetgrent} & Legge una voce dal file di registro dei gruppi
specificato.\\
- \func{fgetpwent\_r}& Come la precedente, ma \index{funzioni!rientranti}
- rientrante.\\
- \func{putpwent} & Immette una voce in un file di registro degli
- utenti.\\
- \func{getpwent} & Legge una voce da \conffile{/etc/passwd}.\\
- \func{getpwent\_r} & Come la precedente, ma \index{funzioni!rientranti}
- rientrante.\\
- \func{setpwent} & Ritorna all'inizio di \conffile{/etc/passwd}.\\
- \func{endpwent} & Chiude \conffile{/etc/passwd}.\\
- \func{fgetgrent} & Legge una voce dal file di registro dei gruppi
- specificato.\\
- \func{fgetgrent\_r}& Come la precedente, ma \index{funzioni!rientranti}
- rientrante.\\
- \func{putgrent} & Immette una voce in un file di registro dei gruppi.\\
- \func{getgrent} & Legge una voce da \conffile{/etc/group}.\\
- \func{getgrent\_r} & Come la precedente, ma \index{funzioni!rientranti}
- rientrante.\\
- \func{setgrent} & Ritorna all'inizio di \conffile{/etc/group}.\\
- \func{endgrent} & Chiude \conffile{/etc/group}.\\
+ \funcm{fgetgrent\_r}& Come la precedente, ma \index{funzioni!rientranti}
+ rientrante.\\
+ \funcm{putgrent} & Immette una voce in un file di registro dei gruppi.\\
+ \funcm{getgrent} & Legge una voce da \conffile{/etc/group}.\\
+ \funcm{getgrent\_r} & Come la precedente, ma \index{funzioni!rientranti}
+ rientrante.\\
+ \funcm{setgrent} & Ritorna all'inizio di \conffile{/etc/group}.\\
+ \funcm{endgrent} & Chiude \conffile{/etc/group}.\\
\hline
\end{tabular}
\caption{Funzioni per la manipolazione dei campi di un file usato come
\label{tab:sys_passwd_func}
\end{table}
+% TODO mancano i prototipi di alcune delle funzioni
+
Dato che oramai la gran parte delle distribuzioni di GNU/Linux utilizzano
almeno le \textit{shadow password} (quindi con delle modifiche rispetto al
formato classico del file \conffile{/etc/passwd}), si tenga presente che le
Le \acr{glibc} utilizzano già una versione estesa di \code{utmp}, che rende
inutili queste nuove strutture; pertanto esse e le relative funzioni di
-gestione (\func{getutxent}, \func{getutxid}, \func{getutxline},
-\func{pututxline}, \func{setutxent} e \func{endutxent}) sono ridefinite come
+gestione (\funcm{getutxent}, \funcm{getutxid}, \funcm{getutxline},
+\funcm{pututxline}, \funcm{setutxent} e \funcm{endutxent}) sono ridefinite come
sinonimi delle funzioni appena viste.
+% TODO (verificare le funzioni di cui sopra )
+
Come visto in sez.~\ref{sec:sys_user_group}, l'uso di strutture allocate
staticamente rende le funzioni di lettura non \index{funzioni!rientranti}
rientranti; per questo motivo le \acr{glibc} forniscono anche delle versioni
-\index{funzioni!rientranti} rientranti: \func{getutent\_r}, \func{getutid\_r},
-\func{getutline\_r}, che invece di restituire un puntatore restituiscono un
+\index{funzioni!rientranti} rientranti: \funcm{getutent\_r}, \funcm{getutid\_r},
+\funcm{getutline\_r}, che invece di restituire un puntatore restituiscono un
intero e prendono due argomenti aggiuntivi. Le funzioni si comportano
esattamente come le analoghe non \index{funzioni!rientranti} rientranti, solo
che restituiscono il risultato all'indirizzo specificato dal primo argomento
\errval{ENOTDIR}, \errval{EROFS}.}
\end{prototype}
-La funzione attiva il salvataggio dei dati sul file indicato dal pathname
-contenuti nella stringa puntata da \param{filename}; la funzione richiede che
-il processo abbia i privilegi di amministratore (è necessaria la
-\itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi
+La funzione attiva il salvataggio dei dati sul file indicato dal
+\textit{pathname} contenuti nella stringa puntata da \param{filename}; la
+funzione richiede che il processo abbia i privilegi di amministratore (è
+necessaria la \itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi
sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \val{NULL} per
\param{filename} il \textit{BSD accounting} viene invece disabilitato. Un
semplice esempio per l'uso di questa funzione è riportato nel programma
una lettura approfondita del meccanismo descritto nell'RFC~1305, ci limitiamo
a descrivere in tab.~\ref{tab:sys_timex_mode} i principali valori utilizzabili
per il campo \var{mode}, un elenco più dettagliato del significato dei vari
-campi della struttura \struct{timex} può essere ritrovato in \cite{glibc}.
+campi della struttura \struct{timex} può essere ritrovato in \cite{GlibcMan}.
\begin{table}[!htb]
\footnotesize
(quella riportata dalla pagina di manuale), che restituisce \code{int} al
posto di \code{char *}, e che tronca la stringa restituita a
\param{size}.} una apposita versione \index{funzioni!rientranti} rientrante
-\func{strerror\_r}, il cui prototipo è:
+\funcd{strerror\_r}, il cui prototipo è:
\begin{prototype}{string.h}
{char * strerror\_r(int errnum, char *buf, size\_t size)}
altrimenti la stringa viene troncata.
Una seconda funzione usata per riportare i codici di errore in maniera
-automatizzata sullo standard error (vedi sez.~\ref{sec:file_std_descr}) è
-\funcd{perror}, il cui prototipo è:
+automatizzata sullo standard error è \funcd{perror}, il cui prototipo è:
\begin{prototype}{stdio.h}{void perror(const char *message)}
Stampa il messaggio di errore relativo al valore corrente di \var{errno}
sullo standard error; preceduto dalla stringa \param{message}.
gestione delle opzioni e tutte le definizioni necessarie ad associare il
valore numerico alla costante simbolica. In particolare si è riportata la
sezione che converte la stringa passata come argomento in un intero
-(\texttt{\small 1--2}), controllando con i valori di ritorno di \func{strtol}
+(\texttt{\small 1--2}), controllando con i valori di ritorno di \funcm{strtol}
che la conversione sia avvenuta correttamente (\texttt{\small 4--10}), e poi
stampa, a seconda dell'opzione scelta il messaggio di errore (\texttt{\small
11--14}) o la macro (\texttt{\small 15--17}) associate a quel codice.