X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=8f074839df2b65ff3375a0343db6bac6d84e551c;hp=77a866afcea69c5179a3d7a709eee9190d389f8f;hb=dcf2c2df897955ff3503a7c426025457ab456fd7;hpb=ffb12837c5ed8ccc095bc9c88349cd19b5e6b472 diff --git a/system.tex b/system.tex index 77a866a..8f07483 100644 --- a/system.tex +++ b/system.tex @@ -403,8 +403,7 @@ riportate in tab.~\ref{tab:sys_file_macro}. \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 @@ -435,7 +434,7 @@ le analoghe di tab.~\ref{tab:sys_posix1_general}. \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 @@ -478,13 +477,13 @@ E si noti come la funzione in questo caso richieda un argomento che specifichi a quale file si fa riferimento, dato che il valore del limite cercato può variare a seconda del filesystem. Una seconda versione della funzione, \funcd{fpathconf}, opera su un file descriptor invece che su un -\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}. @@ -603,8 +602,8 @@ maniera gerarchica all'interno di un albero;\footnote{si tenga presente che 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 @@ -647,9 +646,9 @@ forma di file alcune delle strutture interne del kernel stesso. 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. @@ -717,9 +716,10 @@ dall'altra con il diffondersi delle reti la necessità di centralizzare le 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 @@ -851,15 +851,16 @@ fig.~\ref{fig:sys_group_struct}. 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 @@ -869,27 +870,27 @@ file di \textsl{registro} di utenti e gruppi, con il formato classico di \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 @@ -898,6 +899,8 @@ file di \textsl{registro} di utenti e gruppi, con il formato classico di \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 @@ -1084,15 +1087,17 @@ sono un sovrainsieme di \code{utmp}. 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 @@ -1548,10 +1553,10 @@ prototipo è: \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 @@ -2292,7 +2297,7 @@ non \index{funzioni!rientranti} rientrante, per cui nel caso si usino i (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)} @@ -2358,7 +2363,7 @@ completo del programma è allegato nel file \file{ErrCode.c} e contiene pure la gestione delle opzioni e tutte le definizioni necessarie ad associare il valore numerico alla costante simbolica. In particolare si è riportata la sezione che converte la stringa passata come 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.