From 263a8a7ae0f9b251fc3b631e8bbba546bf8c2572 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Mon, 16 Jul 2007 10:52:00 +0000 Subject: [PATCH] Ulteriori indicizzazioni dei file. --- ipc.tex | 4 +- sockctrl.tex | 121 ++++++++++++++++++++++++++------------------------- system.tex | 17 +++++--- 3 files changed, 73 insertions(+), 69 deletions(-) diff --git a/ipc.tex b/ipc.tex index df279c9..6587147 100644 --- a/ipc.tex +++ b/ipc.tex @@ -3341,7 +3341,7 @@ POSIX.\footnote{in realt La libreria inoltre richiede la presenza dell'apposito filesystem di tipo \texttt{mqueue} montato su \file{/dev/mqueue}; questo può essere fatto -aggiungendo ad \file{/etc/fstab} una riga come: +aggiungendo ad \conffile{/etc/fstab} una riga come: \begin{verbatim} mqueue /dev/mqueue mqueue defaults 0 0 \end{verbatim} @@ -3787,7 +3787,7 @@ questo di norma viene fatto aggiungendo una riga del tipo di: \begin{verbatim} tmpfs /dev/shm tmpfs defaults 0 0 \end{verbatim} -ad \file{/etc/fstab}. In realtà si può montare un filesystem \texttt{tmpfs} +ad \conffile{/etc/fstab}. In realtà si può montare un filesystem \texttt{tmpfs} dove si vuole, per usarlo come RAM disk, con un comando del tipo: \begin{verbatim} mount -t tmpfs -o size=128M,nr_inodes=10k,mode=700 tmpfs /mytmpfs diff --git a/sockctrl.tex b/sockctrl.tex index c5bfafc..e3ad47b 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -85,19 +85,19 @@ funzioni di librerie utilizzate dai programmi, vale la pena fare una panoramica generale. Originariamente la configurazione del \textit{resolver} riguardava esclusivamente le questioni relative alla gestione dei nomi a dominio, e prevedeva solo l'utilizzo del DNS e del file statico -\file{/etc/hosts}. +\conffile{/etc/hosts}. Per questo aspetto il file di configurazione principale del sistema è -\file{/etc/resolv.conf} che contiene in sostanza l'elenco degli indirizzi IP -dei server DNS da contattare; a questo si affianca il file -\file{/etc/host.conf} il cui scopo principale è indicare l'ordine in cui -eseguire la risoluzione dei nomi (se usare prima i valori di \file{/etc/hosts} -o quelli del DNS). Tralasciamo i dettagli relativi alle varie direttive che -possono essere usate in questi file, che si trovano nelle rispettive pagine di -manuale. +\conffile{/etc/resolv.conf} che contiene in sostanza l'elenco degli indirizzi +IP dei server DNS da contattare; a questo si affianca il file +\conffile{/etc/host.conf} il cui scopo principale è indicare l'ordine in cui +eseguire la risoluzione dei nomi (se usare prima i valori di +\conffile{/etc/hosts} o quelli del DNS). Tralasciamo i dettagli relativi alle +varie direttive che possono essere usate in questi file, che si trovano nelle +rispettive pagine di manuale. Con il tempo però è divenuto possibile fornire diversi sostituti per -l'utilizzo delle associazione statiche in \file{/etc/hosts}, inoltre oltre +l'utilizzo delle associazione statiche in \conffile{/etc/hosts}, inoltre oltre alla risoluzione dei nomi a dominio ci sono anche altri nomi da risolvere, come quelli che possono essere associati ad una rete (invece che ad una singola macchina) o ai gruppi di macchine definiti dal servizio @@ -107,16 +107,17 @@ NIS,\footnote{il \textit{Network Information Service} \textit{netgroup}) varie macchine, centralizzando i servizi di definizione di utenti e gruppi e di autenticazione, oggi è sempre più spesso sostituito da LDAP.} o come quelli dei protocolli e dei servizi che sono mantenuti nei -file statici \file{/etc/protocols} e \file{/etc/services}. Molte di queste -informazioni non si trovano su un DNS, ma in una rete locale può essere molto -utile centralizzare il mantenimento di alcune di esse su opportuni server. -Inoltre l'uso di diversi supporti possibili per le stesse informazioni (ad -esempio il nome delle macchine può essere mantenuto sia tramite -\file{/etc/hosts}, che con il DNS, che con NIS) comporta il problema -dell'ordine in cui questi vengono interrogati.\footnote{con le implementazioni - classiche i vari supporti erano introdotti modificando direttamente le - funzioni di libreria, prevedendo un ordine di interrogazione predefinito e - non modificabile (a meno di una ricompilazione delle librerie stesse).} +file statici \conffile{/etc/protocols} e \conffile{/etc/services}. Molte di +queste informazioni non si trovano su un DNS, ma in una rete locale può essere +molto utile centralizzare il mantenimento di alcune di esse su opportuni +server. Inoltre l'uso di diversi supporti possibili per le stesse +informazioni (ad esempio il nome delle macchine può essere mantenuto sia +tramite \conffile{/etc/hosts}, che con il DNS, che con NIS) comporta il +problema dell'ordine in cui questi vengono interrogati.\footnote{con le + implementazioni classiche i vari supporti erano introdotti modificando + direttamente le funzioni di libreria, prevedendo un ordine di interrogazione + predefinito e non modificabile (a meno di una ricompilazione delle librerie + stesse).} \itindbeg{Name~Service~Switch} Per risolvere questa serie di problemi la risoluzione dei nomi a dominio @@ -169,21 +170,21 @@ tab.~\ref{tab:sys_NSS_classes}. \label{tab:sys_NSS_classes} \end{table} -Il sistema del \textit{Name Service Switch} è controllato dal contenuto del -file \file{/etc/nsswitch.conf}; questo contiene una riga\footnote{seguendo una - convezione comune per i file di configurazione le righe vuote vengono - ignorate e tutto quello che segue un carattere ``\texttt{\#}'' viene - considerato un commento.} di configurazione per ciascuna di queste classi, -che viene inizia col nome di tab.~\ref{tab:sys_NSS_classes} seguito da un -carattere ``\texttt{:}'' e prosegue con la lista dei \textsl{servizi} su cui -le relative informazioni sono raggiungibili, scritti nell'ordine in cui si +Il sistema del \textit{Name Service Switch} è controllato dal contenuto del +file \conffile{/etc/nsswitch.conf}; questo contiene una riga\footnote{seguendo + una convezione comune per i file di configurazione le righe vuote vengono + ignorate e tutto quello che segue un carattere ``\texttt{\#}'' viene + considerato un commento.} di configurazione per ciascuna di queste classi, +che viene inizia col nome di tab.~\ref{tab:sys_NSS_classes} seguito da un +carattere ``\texttt{:}'' e prosegue con la lista dei \textsl{servizi} su cui +le relative informazioni sono raggiungibili, scritti nell'ordine in cui si vuole siano interrogati. -Ogni servizio è specificato a sua volta da un nome, come \texttt{file}, -\texttt{dns}, \texttt{db}, ecc. che identifica la libreria dinamica che -realizza l'interfaccia con esso. Per ciascun servizio se \texttt{NAME} è il -nome utilizzato dentro \file{/etc/nsswitch.conf}, dovrà essere presente -(usualmente in \file{/lib}) una libreria \texttt{libnss\_NAME} che ne +Ogni servizio è specificato a sua volta da un nome, come \texttt{file}, +\texttt{dns}, \texttt{db}, ecc. che identifica la libreria dinamica che +realizza l'interfaccia con esso. Per ciascun servizio se \texttt{NAME} è il +nome utilizzato dentro \conffile{/etc/nsswitch.conf}, dovrà essere presente +(usualmente in \file{/lib}) una libreria \texttt{libnss\_NAME} che ne implementa le funzioni. In ogni caso, qualunque sia la modalità con cui ricevono i dati o il supporto @@ -1031,14 +1032,14 @@ colonna. \multicolumn{2}{|c|}{\textbf{Funzioni}}\\ \hline \hline - indirizzo&\file{/etc/hosts}&\struct{hostent}&\func{gethostbyname}& - \func{gethostbyaddr}\\ - servizio &\file{/etc/services}&\struct{servent}&\func{getservbyname}& - \func{getservbyaddr}\\ - rete &\file{/etc/networks}&\struct{netent}&\func{getnetbyname}& - \func{getnetbyaddr}\\ - protocollo&\file{/etc/protocols}&\struct{protoent}&\func{getprotobyname}& - \func{getprotobyaddr}\\ + indirizzo &\conffile{/etc/hosts}&\struct{hostent}&\func{gethostbyname}& + \func{gethostbyaddr}\\ + servizio &\conffile{/etc/services}&\struct{servent}&\func{getservbyname}& + \func{getservbyaddr}\\ + rete &\conffile{/etc/networks}&\struct{netent}&\func{getnetbyname}& + \func{getnetbyaddr}\\ + protocollo&\conffile{/etc/protocols}&\struct{protoent}& + \func{getprotobyname}&\func{getprotobyaddr}\\ \hline \end{tabular} \caption{Funzioni di risoluzione dei nomi per i vari servizi del @@ -1071,12 +1072,12 @@ viceversa; i loro prototipi sono: Entrambe le funzioni prendono come ultimo argomento una stringa \param{proto} che indica il protocollo per il quale si intende effettuare la -ricerca,\footnote{le informazioni mantenute in \file{/etc/services} infatti - sono relative sia alle porte usate su UDP che su TCP, occorre quindi +ricerca,\footnote{le informazioni mantenute in \conffile{/etc/services} + infatti sono relative sia alle porte usate su UDP che su TCP, occorre quindi specificare a quale dei due protocolli si fa riferimento.} che nel caso si IP può avere come valori possibili solo \texttt{udp} o \texttt{tcp};\footnote{in teoria si potrebbe avere un qualunque protocollo fra - quelli citati in \file{/etc/protocols}, posto che lo stesso supporti il + quelli citati in \conffile{/etc/protocols}, posto che lo stesso supporti il concetto di \textsl{porta}, in pratica questi due sono gli unici presenti.} se si specifica un puntatore nullo la ricerca sarà eseguita su un protocollo qualsiasi. @@ -1084,14 +1085,14 @@ qualsiasi. Il primo argomento è il nome del servizio per \func{getservbyname}, specificato tramite la stringa \param{name}, mentre \func{getservbyport} richiede il numero di porta in \param{port}. Entrambe le funzioni eseguono una -ricerca sul file \file{/etc/services}\footnote{il \textit{Name Service Switch} - astrae il concetto a qualunque supporto su cui si possano mantenere i - suddetti dati. } ed estraggono i dati dalla prima riga che corrisponde agli -argomenti specificati; se la risoluzione ha successo viene restituito un -puntatore ad una apposita struttura \struct{servent} contenente tutti i -risultati), altrimenti viene restituito un puntatore nullo. Si tenga presente -che anche in questo caso i dati vengono mantenuti in una area di memoria -statica e che quindi la funzione non è rientrante. +ricerca sul file \conffile{/etc/services}\footnote{il \textit{Name Service + Switch} astrae il concetto a qualunque supporto su cui si possano + mantenere i suddetti dati. } ed estraggono i dati dalla prima riga che +corrisponde agli argomenti specificati; se la risoluzione ha successo viene +restituito un puntatore ad una apposita struttura \struct{servent} contenente +tutti i risultati), altrimenti viene restituito un puntatore nullo. Si tenga +presente che anche in questo caso i dati vengono mantenuti in una area di +memoria statica e che quindi la funzione non è rientrante. \begin{figure}[!htb] \footnotesize \centering @@ -1128,13 +1129,13 @@ prototipi sono: \begin{functions} \headdecl{netdb.h} \funcdecl{void setservent(int stayopen)} - Apre il file \file{/etc/services} e si posiziona al suo inizio. + Apre il file \conffile{/etc/services} e si posiziona al suo inizio. \funcdecl{struct servent *getservent(void)} - Legge la voce successiva nel file \file{/etc/services}. + Legge la voce successiva nel file \conffile{/etc/services}. \funcdecl{void endservent(void)} - Chiude il file \file{/etc/services}. + Chiude il file \conffile{/etc/services}. \bodydesc{Le due funzioni \func{setservent} e \func{endservent} non restituiscono nulla, \func{getservent} restituisce il puntatore ad una @@ -1143,11 +1144,11 @@ prototipi sono: \end{functions} La prima funzione, \func{getservent}, legge una singola voce a partire dalla -posizione corrente in \file{/etc/services}, pertanto si può eseguire una +posizione corrente in \conffile{/etc/services}, pertanto si può eseguire una lettura sequenziale dello stesso invocandola più volte. Se il file non è aperto provvede automaticamente ad aprirlo, nel qual caso leggerà la prima voce. La seconda funzione, \func{setservent}, permette di aprire il file -\file{/etc/services} per una successiva lettura, ma se il file è già stato +\conffile{/etc/services} per una successiva lettura, ma se il file è già stato aperto riporta la posizione di lettura alla prima voce del file, in questo modo si può far ricominciare da capo una lettura sequenziale. L'argomento \param{stayopen}, se diverso da zero, fa sì che il file resti aperto anche fra @@ -1317,7 +1318,7 @@ valore nullo. Il campo \var{ai\_protocol} permette invece di effettuare la selezione dei risultati per il nome del servizio usando il numero identificativo del rispettivo protocollo di trasporto (i cui valori possibili sono riportati in -\file{/etc/protocols}); di nuovo i due soli valori utilizzabili sono quelli +\conffile{/etc/protocols}); di nuovo i due soli valori utilizzabili sono quelli relativi a UDP e TCP, o il valore nullo che indica di ignorare questo campo nella selezione. @@ -1694,7 +1695,7 @@ l'uso dei socket. La funzione prende quattro argomenti, i primi due sono le stringhe che indicano il nome della macchina a cui collegarsi ed il relativo servizio su cui sarà effettuata la risoluzione; seguono il protocollo da usare (da -specificare con il valore numerico di \file{/etc/protocols}) ed il tipo di +specificare con il valore numerico di \conffile{/etc/protocols}) ed il tipo di socket (al solito specificato con i valori illustrati in sez.~\ref{sec:sock_type}). La funzione ritorna il valore del file descriptor associato al socket (un numero positivo) in caso di successo, o -1 in caso di @@ -1897,7 +1898,7 @@ qualunque tipo di socket. I valori usati per \param{level}, corrispondenti ad un dato protocollo usato da un socket, sono quelli corrispondenti al valore numerico che identifica il -suddetto protocollo in \file{/etc/protocols}; dato che la leggibilità di un +suddetto protocollo in \conffile{/etc/protocols}; dato che la leggibilità di un programma non trarrebbe certo beneficio dall'uso diretto dei valori numerici, più comunemente si indica il protocollo tramite le apposite costanti \texttt{SOL\_*} riportate in tab.~\ref{tab:sock_option_levels}, dove si sono @@ -1906,7 +1907,7 @@ riassunti i valori che possono essere usati per l'argomento confusa: infatti in Linux il valore si può impostare sia usando le costanti \texttt{SOL\_*}, che le analoghe \texttt{IPPROTO\_*} (citate anche da Stevens in \cite{UNP1}); entrambe hanno gli stessi valori che sono - equivalenti ai numeri di protocollo di \file{/etc/protocols}, con una + equivalenti ai numeri di protocollo di \conffile{/etc/protocols}, con una eccezione specifica, che è quella del protocollo ICMP, per la quale non esista una costante, il che è comprensibile dato che il suo valore, 1, è quello che viene assegnato a \const{SOL\_SOCKET}.} diff --git a/system.tex b/system.tex index 9ca3767..8142546 100644 --- a/system.tex +++ b/system.tex @@ -658,11 +658,14 @@ in \file{linux/sysctl.h},\footnote{indicando un file di definizioni si fa disponibile in \file{/proc/sys} è riportata inoltre nella documentazione inclusa nei sorgenti del kernel, nella directory \file{Documentation/sysctl}. -Ma oltre alle informazioni ottenibili da \func{sysctl} dentro \file{proc} -sono disponibili moltissime altre informazioni, fra cui ad esempio anche -quelle fornite da \func{uname} (vedi sez.~\ref{sec:sys_config}) che sono -mantenute nei file \file{ostype}, \file{hostname}, \file{osrelease}, -\file{version} e \file{domainname} di \file{/proc/kernel/}. +Ma oltre alle informazioni ottenibili da \func{sysctl} dentro \file{proc} sono +disponibili moltissime altre informazioni, fra cui ad esempio anche quelle +fornite da \func{uname} (vedi sez.~\ref{sec:sys_config}) che sono mantenute +nei file \procrelfile{/proc/sys/kernel}{ostype}, +\procrelfile{/proc/sys/kernel}{hostname}, +\procrelfile{/proc/sys/kernel}{osrelease}, +\procrelfile{/proc/sys/kernel}{version} e +\procrelfile{/proc/sys/kernel}{domainname} di \file{/proc/sys/kernel/}. @@ -906,8 +909,8 @@ file \conffile{/etc/fstab} ed \conffile{/etc/mtab}, che convenzionalmente sono usati in quasi tutti i sistemi unix-like per mantenere rispettivamente le informazioni riguardo ai filesystem da montare e a quelli correntemente montati. Le funzioni servono a leggere il contenuto di questi file in -opportune strutture \struct{fstab} e \struct{mntent}, e, per \file{/etc/mtab} -per inserire e rimuovere le voci presenti nel file. +opportune strutture \struct{fstab} e \struct{mntent}, e, per +\conffile{/etc/mtab} per inserire e rimuovere le voci presenti nel file. In generale si dovrebbero usare queste funzioni (in particolare quelle relative a \conffile{/etc/mtab}), quando si debba scrivere un programma che -- 2.30.2