Aggiunte seteuid, setreuid, setresuid
[gapil.git] / socket.tex
index 6125406d574b65272abdf29cbdd12c281db8d893..9a1018bfe447419f78b339c3f44c173f6ede087d 100644 (file)
@@ -552,16 +552,18 @@ numero. Il caso opposto, in cui si parte dal bit meno significativo 
 per lo stesso motivo \textit{big endian}.
 
 La \textit{endianess} di un computer dipende essenzialmente dalla architettura
-hardware usata; Intel e Digital usano il little endian, Motorola, IBM, Sun
-(sostanzialmente tutti gli altri) usano il big endian. Il formato della rete è
-anch'esso big endian, quello del bus PCI è little endian, quello del bus VME è
-big endian. 
+hardware usata; Intel e Digital usano il \textit{little endian}, Motorola,
+IBM, Sun (sostanzialmente tutti gli altri) usano il \textit{big endian}. Il
+formato della rete è anch'esso \textit{big endian}, altri esempi sono quello
+del bus PC, che è \textit{little endian}, o quello del bus VME che è
+\textit{big endian}.
 
 Esistono poi anche dei processori che possono scegliere il tipo di formato
-all'avvio e alcuni, come il PowerPC o l'Intel i860, possono pure passare da un
-tipo di ordinamento all'altro con una specifica istruzione; in ogni caso in
-Linux l'ordinamento è definito dall'architettura e anche se questi cambiamenti
-sono possibili anche dopo che il sistema è avviato, non vengono mai eseguiti.
+all'avvio e alcuni che, come il PowerPC o l'Intel i860, possono pure passare
+da un tipo di ordinamento all'altro con una specifica istruzione. In ogni caso
+in Linux l'ordinamento è definito dall'architettura e dopo l'avvio del sistema
+resta sempre lo stesso, anche quando il processore permetterebbe di eseguire
+questi cambiamenti.
 
 \subsection{Le funzioni per il riordinamento}
 \label{sec:sock_func_ord}
@@ -596,16 +598,17 @@ funzioni sono:
   Converte l'intero a 16 bit \var{netshort} dal formato della rete a quello
   della macchina.
 \end{prototype}
-I nomi sono assegnati usando la lettera $n$ come mnemonico per indicare
-l'ordinamento usato sulla rete (da \textit{network order}) e la lettera $h$
-come mnemonico per l'ordinamento usato sulla macchina locale (da \textit{host
-  order}), mentre le lettere $s$ e $l$ stanno ad indicare i tipi di dato
-(\type{long} o \type{short}, riportati anche dai prototipi).
+I nomi sono assegnati usando la lettera \func{n} come mnemonico per indicare
+l'ordinamento usato sulla rete (da \textit{network order}) e la lettera
+\func{h} come mnemonico per l'ordinamento usato sulla macchina locale (da
+\textit{host order}), mentre le lettere \func{s} e \func{l} stanno ad indicare
+i tipi di dato (\type{long} o \type{short}, riportati anche dai prototipi).
 
-Usando queste funzioni si ha la conversione automatica (nel caso pure la
-macchina sia in big endian queste funzioni sono definite come macro che non
-fanno nulla); esse vanno sempre utilizzate per assicurare la portabilità del
-codice su tutte le architetture.
+Usando queste funzioni si ha la conversione automatica: nel caso in cui la
+macchina che si sta usando abbia una architettura \textit{big endian} queste
+funzioni sono definite come macro che non fanno nulla. Per questo motivo vanno
+sempre utilizzate, anche quando potrebbero non essere necessarie, in modo da
+assicurare la portabilità del codice su tutte le architetture.
 
 
 \subsection{Le funzioni \func{inet\_aton}, \func{inet\_addr} e 
@@ -620,16 +623,16 @@ Le prime tre funzioni di manipolazione riguardano la conversione degli
 indirizzi IPv4 da una stringa in cui il numero di IP è espresso secondo la
 cosiddetta notazione \textit{dotted-decimal}, (cioè nella forma
 \texttt{192.160.0.1}) al formato binario (direttamente in \textit{network
-  order}) e viceversa; in questo caso si usa la lettera $a$ come mnemonico per
-indicare la stringa. Dette funzioni sono:
+  order}) e viceversa; in questo caso si usa la lettera \func{a} come
+mnemonico per indicare la stringa. Dette funzioni sono:
 \begin{prototype}{arpa/inet.h}
-  {int inet\_aton(const char *src, struct in\_addr *dest)} Converte la stringa
-  puntata da \var{src} nell'indirizzo binario da memorizzare all'indirizzo
-  puntato da \var{dest}, restituendo 0 in caso di successo e 1 in caso di
-  fallimento (è espressa in questa forma in modo da poterla usare direttamente
-  con il puntatore usato per passare la struttura degli indirizzi). Se usata
-  con \var{dest} inizializzato a \macro{NULL} effettua la validazione
-  dell'indirizzo.
+  {int inet\_aton(const char *src, struct in\_addr *dest)} 
+  Converte la stringa puntata da \var{src} nell'indirizzo binario da
+  memorizzare all'indirizzo puntato da \var{dest}, restituendo 0 in caso di
+  successo e 1 in caso di fallimento (è espressa in questa forma in modo da
+  poterla usare direttamente con il puntatore usato per passare la struttura
+  degli indirizzi). Se usata con \var{dest} inizializzato a \macro{NULL}
+  effettua la validazione dell'indirizzo.
 \end{prototype}
 \begin{prototype}{arpa/inet.h}{in\_addr\_t inet\_addr(const char *strptr)}
   Restituisce l'indirizzo a 32 bit in network order a partire dalla stringa
@@ -640,10 +643,10 @@ indicare la stringa. Dette funzioni sono:
   generalmente deprecata in favore della precedente.
 \end{prototype}  
 \begin{prototype}{arpa/inet.h}{char *inet\_ntoa(struct in\_addr addrptr)}
-  Converte il valore a 32 bit dell'indirizzo (espresso in network order)
-  restituendo il puntatore alla stringa che contiene l'espressione in formato
-  dotted decimal. Si deve tenere presente che la stringa risiede in memoria
-  statica, per cui questa funzione non è rientrante.
+  Converte il valore a 32 bit dell'indirizzo (espresso in \textit{network
+    order}) restituendo il puntatore alla stringa che contiene l'espressione
+  in formato dotted decimal. Si deve tenere presente che la stringa risiede in
+  memoria statica, per cui questa funzione non è rientrante.
 \end{prototype}
 
 
@@ -653,8 +656,9 @@ indicare la stringa. Dette funzioni sono:
 Le tre funzioni precedenti sono limitate solo ad indirizzi IPv4, per questo
 motivo è preferibile usare le due nuove funzioni \func{inet\_pton} e
 \func{inet\_ntop} che possono convertire anche gli indirizzi IPv6. Anche in
-questo caso le lettere $n$ e $p$ sono degli mnemonici per ricordare il tipo di
-conversione effettuata e stanno per \textit{presentation} e \textit{numeric}.
+questo caso le lettere \func{n} e \func{p} sono degli mnemonici per ricordare
+il tipo di conversione effettuata e stanno per \textit{presentation} e
+\textit{numeric}.
 
 % \begin{figure}[htb]
 %   \centering  
@@ -763,16 +767,16 @@ ssize_t SockRead(int fd, void *buf, size_t count)
     return (count - nleft);
 }  
   \end{lstlisting}
-  \caption{Funzione \texttt{SockRead}, legge $n$ bytes da un socket }
+  \caption{Funzione \func{SockRead}, legge \var{count} bytes da un socket }
   \label{fig:sock_SockRead_code}
 \end{figure}
 
 Per questo motivo seguendo l'esempio di W. R. Stevens si sono definite due
-funzioni \texttt{SockRead} e \texttt{SockWrite} che eseguono la lettura da un
+funzioni \func{SockRead} e \func{SockWrite} che eseguono la lettura da un
 socket tenendo conto di questa caratteristica, ed in grado di ritornare dopo
 avere letto o scritto esattamente il numero di bytes specificato; il sorgente
 è riportato in \curfig\ e \nfig\ ed è disponibile fra i sorgenti allegati alla
-guida nei files \texttt{SockRead.c} e \texttt{SockWrite.c}.
+guida nei files \file{SockRead.c} e \file{SockWrite.c}.
 
 \begin{figure}[htb]
   \centering
@@ -800,19 +804,19 @@ ssize_t SockWrite(int fd, const void *buf, size_t count)
     return (count);
 }  
   \end{lstlisting}
-  \caption{Funzione \texttt{SockWrite}, scrive $n$ bytes su un socket }
+  \caption{Funzione \func{SockWrite}, scrive \var{count} bytes su un socket }
   \label{fig:sock_SockWrite_code}
 \end{figure}
 
 Come si può notare le funzioni ripetono la lettura/scrittura in un ciclo fino
 all'esaurimento del numero di bytes richiesti, in caso di errore viene
-controllato se questo è \texttt{EINTR} (cioè un'interruzione della system call
+controllato se questo è \macro{EINTR} (cioè un'interruzione della system call
 dovuta ad un segnale), nel qual caso l'accesso viene ripetuto, altrimenti
-l'errore viene ritornato interrompendo il ciclo. 
+l'errore viene ritornato interrompendo il ciclo.
 
-Nel caso della lettura se il numero di bytes letti è zero significa che è
+Nel caso della lettura, se il numero di bytes letti è zero, significa che si è
 arrivati alla fine del file e pertanto si ritorna senza aver concluso la
-lettura di tutti i bytes richiesti. 
+lettura di tutti i bytes richiesti.