Correzioni di claudio
authorSimone Piccardi <piccardi@gnulinux.it>
Thu, 20 Dec 2001 18:13:52 +0000 (18:13 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Thu, 20 Dec 2001 18:13:52 +0000 (18:13 +0000)
filestd.tex
process.tex
prochand.tex

index df1b4655337b218f851cd3e9a15b2ffd9beeeb6d..582f696764ce856da6a0a02263ea3dfb6473a1f1 100644 (file)
@@ -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
index f29f993320cbda410a2f40761726231514c56fad..93ac41119150c0af0bb9222a3f4164b3c1b4c03d 100644 (file)
@@ -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
index 8c8a67190e98a67d4502897f1611bf83bb8e8a40..db517e90d28db138259c6bf95bffbedb2466a792 100644 (file)
@@ -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