From: Simone Piccardi Date: Thu, 20 Dec 2001 18:13:52 +0000 (+0000) Subject: Correzioni di claudio X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=bd18ae03e4b95cf99bec30653520049c75e6d028;ds=sidebyside Correzioni di claudio --- diff --git a/filestd.tex b/filestd.tex index df1b465..582f696 100644 --- a/filestd.tex +++ b/filestd.tex @@ -805,7 +805,7 @@ newline, che deve essere previsto esplicitamente. Come per le funzioni di input/output a caratteri esistono le estensioni per leggere e scrivere caratteri estesi, i loro prototipi sono: \begin{functions} - \headdecl{whar.h} + \headdecl{wchar.h} \funcdecl{wchar\_t *fgetws(wchar\_t *ws, int n, FILE *stream)} Legge un massimo di \param{n} caratteri estesi dal file \param{stream} al buffer \param{ws}. @@ -834,7 +834,7 @@ previste dallo standard ANSI C presentano svariati inconvenienti. Bench \func{fgets} non abbia i gravissimi problemi di \func{gets}, può comunque dare risultati ambigui se l'input contiene degli zeri; questi infatti saranno scritti sul buffer di uscita e la stringa in output -apparirà come più corta dei bytes effettivamente letti. Questa è una +apparirà come più corta dei byte effettivamente letti. Questa è una condizione che è sempre possibile controllare (deve essere presente un newline prima della effettiva conclusione della stringa presente nel buffer), ma a costo di una complicazione ulteriore della logica del @@ -940,7 +940,7 @@ famiglia \func{printf}; le tre pi \bodydesc{Le funzioni ritornano il numero di caratteri stampati.} \end{functions} \noindent le prime due servono per stampare su file (lo standard output -o quallo specificato) la terza permette di stampare su una stringa, in +o quello specificato) la terza permette di stampare su una stringa, in genere l'uso di \func{sprintf} è sconsigliato in quanto è possibile, se non si ha la sicurezza assoluta sulle dimensioni del risultato della stampa, eccedere le dimensioni di \param{str}; per questo motivo si @@ -955,56 +955,111 @@ La parte pi \param{format} che indica le conversioni da fare, da cui poi deriva il numero dei parametri che dovranno essere passati a seguire. La stringa è costituita da caratteri normali (tutti eccetto \texttt{\%}), che vengono passati -invariati all'output, e da direttive di conversione, il cui formato è sempre -del tipo: +invariati all'output, e da direttive di conversione, in cui devono essere +sempre presenti il carattere \texttt{\%}, che introduce la direttiva, ed uno +degli specificatori di conversione (riportati in \ntab) che la conclude. + +\begin{table}[htb] + \centering + \begin{tabular}[c]{|l|l|p{10cm}|} + \hline + \textbf{Valore} & \textbf{Tipo} & \textbf{Significato} \\ + \hline + \hline + \cmd{\%d} &\type{int} & Stampa un numero intero in formato decimale + con segno \\ + \cmd{\%i} &\type{int} & Identico a \cmd{\%i} in output, \\ + \cmd{\%o} &\type{unsigned int}& Stampa un numero intero come ottale\\ + \cmd{\%u} &\type{unsigned int}& Stampa un numero intero in formato + decimale senza segno \\ + \cmd{\%x}, + \cmd{\%X} &\type{unsigned int}& Stampano un intero in formato esadecimale, + rispettivamente con lettere minuscole e + maiuscole. \\ + \cmd{\%f} &\type{unsigned int}& Stampa un numero in virgola mobile con la + notazione a virgola fissa \\ + \cmd{\%e}, + \cmd{\%E} &\type{double} & Stampano un numero in virgola mobile con la + notazione esponenziale, rispettivamente con + lettere minuscole e maiuscole. \\ + \cmd{\%g}, + \cmd{\%G} &\type{double} & Stampano un numero in virgola mobile con la + notazione più appropriate delle due precedenti, + rispettivamente con lettere minuscole e + maiuscole. \\ + \cmd{\%a}, + \cmd{\%A} &\type{double} & Stampano un numero in virgola mobile in + notazione esadecimale frazionaria\\ + \cmd{\%c} &\type{int} & Stampa un carattere singolo\\ + \cmd{\%s} &\type{char *} & Stampa una stringa \\ + \cmd{\%p} &\type{void *} & Stampa il valore di un puntatore\\ + \cmd{\%n} &\type{\&int} & Prende il numero di caratteri stampati finora\\ + \cmd{\%\%}& & Stampa un \% \\ + \hline + \end{tabular} + \caption{Valori possibili per gli specificatori di conversione in una + stringa di formato di \func{printf}.} + \label{tab:file_format_spec} +\end{table} + + +Il formato di una direttiva di conversione prevede una serie di possibili +elementi opzionali oltre al \cmd{\%} e allo specificatore di conversione; in +generale essa è sempre del tipo: \begin{center} \begin{verbatim} -% [n. parametro $] [flag] [larghezza] [. precisione] [tipo] conversione +% [n. parametro $] [flag] [[larghezza] [. precisione]] [tipo] conversione \end{verbatim} \end{center} -in cui devono essere sempre presenti il carattere \texttt{\%}, che introduce -la direttiva, ed uno degli specificatori di conversione (riportatati in \ntab) -che la conclude; gli altri valori, indicati fra parentesi, sono opzionali. +in cui i valori opzionali sono indicati fra parentesi, e prevedono la +presenza, in questo ordine, di: uno specificatore per il parametro da usare +(terminato da un \cmd{\$}, uno o più flag (riassunti in \tabref{}) che +controllano il formato di stampa della conversione (riassunti in \tabref{}), +uno specificatore di larghezza, eventualmente seguito (per i numeri in virgola +mobile) da un specificatore di precisione, uno specificatore del tipo di dato +(che ne indica la lunghezza). \begin{table}[htb] \centering \begin{tabular}[c]{|l|p{10cm}|} \hline - \textbf{Valore} & \textbf{Significato} \\ + \textbf{Valore} & \textbf{Significato}\\ \hline \hline - \cmd{\%d} & Stampa un numero intero in formato decimale - con segno\\ - \cmd{\%i} & Identico a \cmd{\%i} in output, \\ - \cmd{\%o} & Stampa un numero intero come ottale\\ - \cmd{\%u} & Stampa un numero intero in formato decimale senza - segno \\ - \cmd{\%x}, \cmd{\%X} & Stampano un intero in formato esadecimale, - rispettivamente con lettere minuscole e maiuscole. \\ - \cmd{\%f} & Stampa un numero in virgola mobile con la notazione - a virgola fissa \\ - \cmd{\%e}, \cmd{\%E} & Stampano un numero in virgola mobile con la notazione - esponenziale, rispettivamente con lettere minuscole - e maiuscole. \\ - \cmd{\%g}, \cmd{\%G} & Stampano un numero in virgola mobile con la notazione - più appropriate delle due precedenti, - rispettivamente con lettere minuscole e maiuscole. \\ - \cmd{\%a}, \cmd{\%A} & Stampano un numero in virgola mobile in notazione - esadecimale frazionaria\\ - \cmd{\%c} & Stampa un carattere singolo\\ - \cmd{\%s} & Stampa una stringa \\ - \cmd{\%p} & Stampa il valore di un puntatore\\ - \cmd{\%n} & Prende il numero di caratteri stampati finora\\ + \cmd{\#} & \\ + \cmd{0} & \\ + \cmd{-} & \\ + \cmd{' '} & \\ + \cmd{+} & \\ \hline \end{tabular} - \caption{Valori possibili per gli specificatori di conversione in una - stringa di formato per l'output.} - \label{tab:file_format_spec} + \caption{I valori dei flag per il formato di \func{printf}} + \label{tab:file_format_flag} \end{table} - +\begin{table}[htb] + \centering + \begin{tabular}[c]{|l|p{10cm}|} + \hline + \textbf{Valore} & \textbf{Significato} \\ + \hline + \hline + \cmd{hh} & \\ + \cmd{h} & \\ + \cmd{l} & \\ + \cmd{ll} & \\ + \cmd{L} & \\ + \cmd{q} & \\ + \cmd{j} & \\ + \cmd{z} & \\ + \cmd{t} & \\ + \hline + \end{tabular} + \caption{Il modificatore di tipo di dato per il formato di \func{printf}} + \label{tab:file_format_type} +\end{table} @@ -1014,11 +1069,10 @@ che la conclude; gli altri valori, indicati fra parentesi, sono opzionali. \label{sec:file_fseek} Come per i file descriptor è possibile anche con gli stream spostarsi -all'interno di un file per effettuare operazioni di lettura o scrittura -in un punto prestabilito; questo fintanto che l'operazione di -riposizionamento è supportata dal file sottostante lo stream, quando -cioè si ha a che fare con quelio che viene detto un file ad -\textsl{accesso casuale}. +all'interno di un file per effettuare operazioni di lettura o scrittura in un +punto prestabilito; questo fintanto che l'operazione di riposizionamento è +supportata dal file sottostante lo stream, quando cioè si ha a che fare con +quello che viene detto un file ad \textsl{accesso casuale}. In GNU/Linux ed in generale in ogni sistema unix-like la posizione nel file è espressa da un intero positivo, rappresentato dal tipo diff --git a/process.tex b/process.tex index f29f993..93ac411 100644 --- a/process.tex +++ b/process.tex @@ -2,29 +2,28 @@ \label{cha:process_interface} Come accennato nell'introduzione il processo è l'unità di base con cui un -sistema unix alloca ed utilizza le risorse. Questo capitolo tratterà -l'interfaccia base fra il sistema e i processi, su come vengono passati i -parametri, come viene gestita e allocata la memoria, su come un processo può -richiedere servizi al sistema, su cosa deve fare quando ha finito la sua +sistema unix-like alloca ed utilizza le risorse. Questo capitolo tratterà +l'interfaccia base fra il sistema e i processi, come vengono passati i +parametri, come viene gestita e allocata la memoria, come un processo può +richiedere servizi al sistema e cosa deve fare quando ha finito la sua esecuzione. Nella sezione finale accenneremo ad alcune problematiche generiche di programmazione. In genere un programma viene eseguito quando un processo lo fa partire eseguendo una funzione della famiglia \func{exec}; torneremo su questo e -sulla la creazione e gestione dei processi nel prossimo capitolo, in questo +sulla creazione e gestione dei processi nel prossimo capitolo. In questo affronteremo l'avvio e il funzionamento di un singolo processo partendo dal -punto di vista del programma posto in esecuzione. - +punto di vista del programma che viene messo in esecuzione. \section{Esecuzione e conclusione di un programma} -Una delle concetti base relativi ai processi è che un processo esegue sempre -uno ed un solo programma: si possono avere più processi che eseguono lo stesso -programma ma ciascun processo vedrà la sua copia del codice (in realtà il -kernel fa si che tutte le parti uguali siano condivise) avrà un suo spazio di -indirizzi, variabili proprie e sarà eseguito in maniera completamente -indipendente da tutti gli altri. +Uno dei concetti base di Unix è che un processo esegue sempre uno ed un solo +programma: si possono avere più processi che eseguono lo stesso programma ma +ciascun processo vedrà la sua copia del codice (in realtà il kernel fa si che +tutte le parti uguali siano condivise), avrà un suo spazio di indirizzi, +variabili proprie e sarà eseguito in maniera completamente indipendente da +tutti gli altri. Anche quando all'interno di un programma possono essere presenti più \textsl{filoni} di esecuzione (i cosiddetti \textit{thread}), o questo possa @@ -38,14 +37,14 @@ parte per la peculiarit \label{sec:proc_main} Quando un programma viene lanciato il kernel esegue una opportuna routine di -avvio, usando il programma \cmd{ld-linux.so}, è questo programma che prima -carica le librerie condivise che servono al programma, effettua il link -dinamico del codice e poi alla fine lo esegue. Infatti, a meno di non aver -specificato il flag \texttt{-static} durante la compilazione, tutti i -programmi in Linux sono incompleti e necessitano di essere linkati alle -librerie condivise quando vengono avviati. La procedura è controllata da -alcune variabili di ambiente e dal contenuto di \file{/etc/ld.so.conf}, i -dettagli sono riportati nella man page di \cmd{ld.so}. +avvio, usando il programma \cmd{ld-linux.so}. Questo programma prima carica +le librerie condivise che servono al programma, poi effettua il link dinamico +del codice e alla fine lo esegue. Infatti, a meno di non aver specificato il +flag \texttt{-static} durante la compilazione, tutti i programmi in Linux sono +incompleti e necessitano di essere linkati alle librerie condivise quando +vengono avviati. La procedura è controllata da alcune variabili di ambiente e +dal contenuto di \file{/etc/ld.so.conf}. I dettagli sono riportati nella man +page di \cmd{ld.so}. Il sistema fa partire qualunque programma chiamando la funzione \func{main}; sta al programmatore chiamare così la funzione principale del programma da cui diff --git a/prochand.tex b/prochand.tex index 8c8a671..db517e9 100644 --- a/prochand.tex +++ b/prochand.tex @@ -1298,14 +1298,17 @@ identificatori, chiamati rispettivamente \textit{real} ed \textit{effective}. il programma\\ \acr{gid} & \textit{real group id} & indica il gruppo dell'utente che ha lanciato il programma \\ + \hline \acr{euid} & \textit{effective user id} & indica l'utente usato dal programma nel controllo di accesso \\ \acr{egid} & \textit{effective group id} & indica il gruppo usato dal programma nel controllo di accesso \\ -- & \textit{supplementary group id} & indica i gruppi cui l'utente appartiene \\ + \hline -- & \textit{saved user id} & copia dell'\acr{euid} iniziale\\ -- & \textit{saved group id} & copia dell'\acr{egid} iniziale \\ + \hline \acr{fsuid} & \textit{filesystem user id} & indica l'utente effettivo per il filesystem \\ \acr{fsgid} & \textit{filesystem group id} & indica il gruppo effettivo