%% fileadv.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
funzione.
L'uso di \param{sigmask} è stato introdotto allo scopo di prevenire possibili
-\textit{race condition}\itindex{race~condition} quando ci si deve porre in
+\textit{race condition} \itindex{race~condition} quando ci si deve porre in
attesa sia di un segnale che di dati. La tecnica classica è quella di
utilizzare il gestore per impostare una variabile globale e controllare questa
nel corpo principale del programma; abbiamo visto in
può fare conto sul fatto che all'arrivo di un segnale essa verrebbe interrotta
e si potrebbero eseguire di conseguenza le operazioni relative al segnale e
alla gestione dati con un ciclo del tipo:
-\includecodesnip{listati/select_race.c} qui però emerge una \textit{race
- condition},\itindex{race~condition} perché se il segnale arriva prima della
-chiamata a \func{select}, questa non verrà interrotta, e la ricezione del
-segnale non sarà rilevata.
+\includecodesnip{listati/select_race.c}
+qui però emerge una \itindex{race~condition} \textit{race condition}, perché
+se il segnale arriva prima della chiamata a \func{select}, questa non verrà
+interrotta, e la ricezione del segnale non sarà rilevata.
Per questo è stata introdotta \func{pselect} che attraverso l'argomento
\param{sigmask} permette di riabilitare la ricezione il segnale
\func{pselect} la ricezione del segnale sarà abilitata, ed in caso di
interruzione si potranno eseguire le relative operazioni.
+% TODO pselect è stata introdotta nel kernel 2.6.16 (o 15 o 17?) insieme a
+% ppoll mettere e verificare
\subsection{La funzione \func{poll}}
tramite \var{errno}.
+% TODO accennare a ppoll
+
%\subsection{L'interfaccia di \textit{epoll}}
%\label{sec:file_epoll}
% placeholder ...
un \const{SIGSEGV}. \\
\const{MAP\_LOCKED} & Se impostato impedisce lo swapping delle pagine
mappate.\\
- \const{MAP\_GROWSDOWN} & Usato per gli stack. Indica
+ \const{MAP\_GROWSDOWN} & Usato per gli \itindex{stack} stack. Indica
che la mappatura deve essere effettuata con gli
indirizzi crescenti verso il basso.\\
\const{MAP\_ANONYMOUS} & La mappatura non è associata a nessun file. Gli
voce nella file table, ma con il valore del \acr{pid} del processo.
Quando si richiede un lock il kernel effettua una scansione di tutti i lock
-presenti sul file\footnote{scandisce cioè la
- \itindex{linked~list}\textit{linked list} delle strutture
- \struct{file\_lock}, scartando automaticamente quelle per cui
- \var{fl\_flags} non è \const{FL\_POSIX}, così che le due interfacce restano
- ben separate.} per verificare se la regione richiesta non si sovrappone ad
-una già bloccata, in caso affermativo decide in base al tipo di lock, in caso
-negativo il nuovo lock viene comunque acquisito ed aggiunto alla lista.
+presenti sul file\footnote{scandisce cioè la \itindex{linked~list}
+ \textit{linked list} delle strutture \struct{file\_lock}, scartando
+ automaticamente quelle per cui \var{fl\_flags} non è \const{FL\_POSIX}, così
+ che le due interfacce restano ben separate.} per verificare se la regione
+richiesta non si sovrappone ad una già bloccata, in caso affermativo decide in
+base al tipo di lock, in caso negativo il nuovo lock viene comunque acquisito
+ed aggiunto alla lista.
Nel caso di rimozione invece questa viene effettuata controllando che il
\acr{pid} del processo richiedente corrisponda a quello contenuto nel lock.
quando esso viene utilizzato per attivare il \textit{mandatory locking}.}
L'uso del \textit{mandatory locking} presenta vari aspetti delicati, dato che
-neanche root può passare sopra ad un lock; pertanto un processo che blocchi un
-file cruciale può renderlo completamente inaccessibile, rendendo completamente
-inutilizzabile il sistema\footnote{il problema si potrebbe risolvere
- rimuovendo il bit \itindex{sgid~bit} \acr{sgid}, ma non è detto che sia così
- facile fare questa operazione con un sistema bloccato.} inoltre con il
-\textit{mandatory locking} si può bloccare completamente un server NFS
-richiedendo una lettura su un file su cui è attivo un lock. Per questo motivo
-l'abilitazione del mandatory locking è di norma disabilitata, e deve essere
-attivata filesystem per filesystem in fase di montaggio (specificando
-l'apposita opzione di \func{mount} riportata in
+neanche l'amministratore può passare sopra ad un lock; pertanto un processo
+che blocchi un file cruciale può renderlo completamente inaccessibile,
+rendendo completamente inutilizzabile il sistema\footnote{il problema si
+ potrebbe risolvere rimuovendo il bit \itindex{sgid~bit} \acr{sgid}, ma non è
+ detto che sia così facile fare questa operazione con un sistema bloccato.}
+inoltre con il \textit{mandatory locking} si può bloccare completamente un
+server NFS richiedendo una lettura su un file su cui è attivo un lock. Per
+questo motivo l'abilitazione del mandatory locking è di norma disabilitata, e
+deve essere attivata filesystem per filesystem in fase di montaggio
+(specificando l'apposita opzione di \func{mount} riportata in
tab.~\ref{tab:sys_mount_flags}, o con l'opzione \code{-o mand} per il comando
omonimo).
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: dell'I locking multiplexing cap dell' sez system call socket BSD
+% LocalWords: descriptor client deadlock NONBLOCK EAGAIN polling select kernel
+% LocalWords: pselect like sys unistd int fd readfds writefds exceptfds struct
+% LocalWords: timeval errno EBADF EINTR EINVAL ENOMEM sleep tab signal void of
+% LocalWords: CLR ISSET SETSIZE POSIX read NULL nell'header l'header glibc fig
+% LocalWords: libc header psignal sigmask SOURCE XOPEN timespec sigset race DN
+% LocalWords: condition sigprocmask tut self trick oldmask poll XPG pollfd l'I
+% LocalWords: ufds unsigned nfds RLIMIT NOFILE EFAULT ndfs events revents hung
+% LocalWords: POLLIN POLLRDNORM POLLRDBAND POLLPRI POLLOUT POLLWRNORM POLLERR
+% LocalWords: POLLWRBAND POLLHUP POLLNVAL POLLMSG SysV stream ASYNC SETOWN FAQ
+% LocalWords: GETOWN fcntl SETFL SIGIO SETSIG Stevens driven siginfo sigaction
+% LocalWords: all'I nell'I Frequently Unanswered Question SIGHUP lease holder
+% LocalWords: breaker truncate write SETLEASE arg RDLCK WRLCK UNLCK GETLEASE
+% LocalWords: uid capabilities capability EWOULDBLOCK notify dall'OR ACCESS st
+% LocalWords: pread readv MODIFY pwrite writev ftruncate creat mknod mkdir buf
+% LocalWords: symlink rename DELETE unlink rmdir ATTRIB chown chmod utime lio
+% LocalWords: MULTISHOT thread linkando librt layer aiocb asyncronous control
+% LocalWords: block ASYNCHRONOUS lseek fildes nbytes reqprio PRIORITIZED sigev
+% LocalWords: PRIORITY SCHEDULING opcode listio sigevent signo value function
+% LocalWords: aiocbp ENOSYS append error const EINPROGRESS fsync return ssize
+% LocalWords: DSYNC fdatasync SYNC cancel ECANCELED ALLDONE CANCELED suspend
+% LocalWords: NOTCANCELED list nent timout sig NOP WAIT NOWAIT size count iov
+% LocalWords: iovec vector EOPNOTSUPP EISDIR len memory mapping mapped swap NB
+% LocalWords: mmap length prot flags off MAP FAILED ANONYMOUS EACCES SHARED SH
+% LocalWords: only ETXTBSY DENYWRITE ENODEV filesystem EPERM EXEC noexec table
+% LocalWords: ENFILE lenght segment violation SIGSEGV FIXED msync munmap copy
+% LocalWords: DoS Denial Service EXECUTABLE NORESERVE LOCKED swapping stack fs
+% LocalWords: GROWSDOWN ANON GiB POPULATE prefaulting SIGBUS fifo VME fork old
+% LocalWords: exec atime ctime mtime mprotect addr EACCESS mremap address new
+% LocalWords: long MAYMOVE realloc VMA virtual Ingo Molnar remap pages pgoff
+% LocalWords: dall' fault cache linker prelink advisory discrectionary lock fl
+% LocalWords: flock shared exclusive operation dup inode linked NFS cmd ENOLCK
+% LocalWords: EDEADLK whence SEEK CUR type pid GETLK SETLK SETLKW all'inode HP
+% LocalWords: switch bsd lockf mandatory SVr sgid group root mount mand TRUNC
+% LocalWords: SVID UX Documentation
\file{stdio.h}.
Entrambe le interfacce possono essere usate per l'accesso ai file come agli
-altri oggetti del VFS (fifo, socket\index{socket}, device, sui quali torneremo
-in dettaglio a tempo opportuno), ma per poter accedere alle operazioni di
-controllo (descritte in sez.~\ref{sec:file_fcntl} e sez.~\ref{sec:file_ioctl})
-su un qualunque tipo di oggetto del VFS occorre usare l'interfaccia standard
-di Unix con i \textit{file descriptor}. Allo stesso modo devono essere usati i
-\textit{file descriptor}\index{file!descriptor} se si vuole ricorrere a
-modalità speciali di I/O come il \textit{file locking}\index{file!locking} o
-l'I/O non-bloccante (vedi cap.~\ref{cha:file_advanced}).
+altri oggetti del VFS (fifo, socket\index{socket}, dispositivi, sui quali
+torneremo in dettaglio a tempo opportuno), ma per poter accedere alle
+operazioni di controllo (descritte in sez.~\ref{sec:file_fcntl} e
+sez.~\ref{sec:file_ioctl}) su un qualunque tipo di oggetto del VFS occorre
+usare l'interfaccia standard di Unix con i \textit{file descriptor}. Allo
+stesso modo devono essere usati i \textit{file descriptor}
+\index{file!descriptor} se si vuole ricorrere a modalità speciali di I/O come
+il \textit{file locking}\index{file!locking} o l'I/O non-bloccante (vedi
+cap.~\ref{cha:file_advanced}).
Gli \textit{stream} forniscono un'interfaccia di alto livello costruita sopra
quella dei \textit{file descriptor}, che permette di poter scegliere tra
%% filestd.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
Questa è una delle vulnerabilità più sfruttate per guadagnare accessi non
autorizzati al sistema (i cosiddetti \textit{exploit}), basta infatti inviare
una stringa sufficientemente lunga ed opportunamente forgiata per
-sovrascrivere gli indirizzi di ritorno nello \itindex{stack} stack (supposto
-che la \func{gets} sia stata chiamata da una subroutine), in modo da far
-ripartire l'esecuzione nel codice inviato nella stringa stessa (in genere uno
-\textit{shell code} cioè una sezione di programma che lancia una shell).
+sovrascrivere gli indirizzi di ritorno nello \itindex{stack} \textit{stack}
+(supposto che la \func{gets} sia stata chiamata da una subroutine), in modo da
+far ripartire l'esecuzione nel codice inviato nella stringa stessa (in genere
+uno \textit{shell code} cioè una sezione di programma che lancia una shell).
La funzione \func{fgets} non ha i precedenti problemi di \func{gets} in quanto
prende in input la dimensione del buffer \param{size}, che non verrà mai
(come delle scritture accidentali sul buffer) e non assicura la scelta delle
dimensioni ottimali, è sempre meglio lasciare allocare il buffer alle funzioni
di libreria, che sono in grado di farlo in maniera ottimale e trasparente
-all'utente (in quanto la disallocazione avviene automaticamente). Inoltre
+all'utente (in quanto la deallocazione avviene automaticamente). Inoltre
siccome alcune implementazioni usano parte del buffer per mantenere delle
informazioni di controllo, non è detto che le dimensioni dello stesso
coincidano con quelle su cui viene effettuato l'I/O.
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: stream cap system call kernel Ritchie glibc descriptor Stevens
+% LocalWords: buf read write filesystem st blksize stat sez l'header stdio BSD
+% LocalWords: nell'header stdin shell stdout stderr error freopen flush line
+% LocalWords: unbuffered buffered newline fully SVr fopen fdopen POSIX const
+% LocalWords: char path int fildes NULL errno malloc fcntl fclose fflush tab
+% LocalWords: dup fifo socket append EXCL ccs STRING IRUSR IWUSR IRGRP IWGRP
+% LocalWords: IROTH IWOTH umask fseek fsetpos rewind SEEK CUR EOF EBADF close
+% LocalWords: sync fcloseall SOURCE void stdlib of feof ferror clearerr l'I ws
+% LocalWords: unlocked fread fwrite size ptr nmemb nelem gcc padding point str
+% LocalWords: lock thread fgetc getc getchar dell'overhead altresì unsigned ap
+% LocalWords: getwc fgetwc getwchar wint wchar WEOF putc fputc putchar dell'I
+% LocalWords: SVID getw putw parsing peeking ahead ungetc gets fgets string
+% LocalWords: overflow Aleph stack fputs puts fgetws fputws getline ssize leak
+% LocalWords: realloc value result argument memory getdelim delim printf short
+% LocalWords: fprintf sprintf format snprintf variadic long double intmax list
+% LocalWords: uintmax ptrdiff vprintf vfprintf vsprintf vsnprintf asprintf lex
+% LocalWords: vasprintf strptr dprintf vdprintf print scanf fscanf sscanf flex
+% LocalWords: vscanf vfscanf vsscanf bison parser yacc like off VMS whence pos
+% LocalWords: lseek ftell fgetpos fpos fseeko ftello fileno Solaris freadable
+% LocalWords: fwritable ext freading fwriting buffering setvbuf BUFSIZ setbuf
+% LocalWords: IONBF IOLBF IOFBF setbuffer setlinebuf flbf fbufsize flushlbf
+% LocalWords: fsync fpurge flockfile ftrylockfile funlockfile SAFE FUNCTIONS
+% LocalWords: locking fsetlocking type BYCALLER QUERY
\itindex{Denial~of~Service~(DoS)}
\textit{DoS}\protect\footnotemark\ quando
\func{opendir} viene chiamata su una fifo o su un
- device di unità a nastri, non deve essere utilizzato
+ dispositivo a nastri; non deve essere utilizzato
al di fuori dell'implementazione di \func{opendir}. \\
\const{O\_LARGEFILE}&nel caso di sistemi a 32 bit che supportano file di
grandi dimensioni consente di aprire file le cui
ed inoltre \errval{EIO}.}
\end{prototype}
-La chiusura di un file rilascia ogni blocco (il \textit{file
- locking}\index{file!locking} è trattato in sez.~\ref{sec:file_locking}) che
-il processo poteva avere acquisito su di esso; se \param{fd} è l'ultimo
+La chiusura di un file rilascia ogni blocco (il \textit{file locking}
+\index{file!locking} è trattato in sez.~\ref{sec:file_locking}) che il
+processo poteva avere acquisito su di esso; se \param{fd} è l'ultimo
riferimento (di eventuali copie) ad un file aperto, tutte le risorse nella
file table vengono rilasciate. Infine se il file descriptor era l'ultimo
riferimento ad un file su disco quest'ultimo viene cancellato.
La funzione prende esattamente gli stessi argomenti di \func{read} con lo
stesso significato, a cui si aggiunge l'argomento \func{offset} che indica una
-posizione sul file. Indetico è il comportamento ed il valore di ritorno. La
+posizione sul file. Identico è il comportamento ed il valore di ritorno. La
funzione serve quando si vogliono leggere dati dal file senza modificare la
posizione corrente.
maniera imprevedibile. Il sistema però fornisce in alcuni casi la possibilità
di eseguire alcune operazioni di scrittura in maniera coordinata anche senza
utilizzare meccanismi di sincronizzazione più complessi (come il \textit{file
- locking}\index{file!locking}, che esamineremo in
+ locking} \index{file!locking}, che esamineremo in
sez.~\ref{sec:file_locking}).
Un caso tipico di necessità di accesso condiviso in scrittura è quello in cui
gestione sia delle loro proprietà, che di tutta una serie di ulteriori
funzionalità che il kernel può mettere a disposizione.\footnote{ad esempio si
gestiscono con questa funzione varie modalità di I/O asincrono (vedi
- sez.~\ref{sec:file_asyncronous_operation}) e il file
- locking\index{file!locking} (vedi sez.~\ref{sec:file_locking}).}
+ sez.~\ref{sec:file_asyncronous_operation}) e il file locking
+ \index{file!locking} (vedi sez.~\ref{sec:file_locking}).}
Per queste operazioni di manipolazione e di controllo delle varie proprietà e
caratteristiche di un file descriptor, viene usata la funzione \funcd{fcntl},
\subsection{La funzione \func{ioctl}}
\label{sec:file_ioctl}
-Benché il concetto di \textit{everything is a file} si sia dimostratato molto
+Benché il concetto di \textit{everything is a file} si sia dimostrato molto
valido anche per l'interazione con i dispositivi più vari, fornendo una
interfaccia che permette di interagire con essi tramite le stesse funzioni
usate per i normali file di dati, esisteranno sempre caratteristiche
caso di errore viene sempre restituito $-1$ ed \var{errno} assumerà uno dei
valori:
\begin{errlist}
- \item[\errcode{ENOTTY}] il file \param{fd} non è associato con un device, o
- la richiesta non è applicabile all'oggetto a cui fa riferimento
- \param{fd}.
+ \item[\errcode{ENOTTY}] il file \param{fd} non è associato con un
+ dispositivo, o la richiesta non è applicabile all'oggetto a cui fa
+ riferimento \param{fd}.
\item[\errcode{EINVAL}] gli argomenti \param{request} o \param{argp} non sono
validi.
\end{errlist}
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: descriptor system call cap like kernel sez l'inode inode VFS tab
+% LocalWords: process table struct files flags pos all'inode dentry fig shell
+% LocalWords: error POSIX STDIN FILENO STDOUT STDERR unistd read write lseek
+% LocalWords: close pathname sys fcntl int const char errno EEXIST CREAT EXCL
+% LocalWords: EISDIR ENOTDIR ENXIO NOBLOCK WRONLY fifo ENODEV ETXTBSY ELOOP of
+% LocalWords: NOFOLLOW EACCES ENAMETOOLONG ENOENT EROFS EFAULT ENOSPC ENOMEM
+% LocalWords: EMFILE ENFILE NFS lock race condition Denial Service DoS RDONLY
+% LocalWords: glibc RDWR NONBLOCK NOCTTY SHLOCK shared BSD EXLOCK TRUNC device
+% LocalWords: opendir LARGEFILE APPEND append NDELAY ASYNC l'I SIGIO SYNC SVr
+% LocalWords: DSYNC RSYNC filesystem DIRECT caching SGI IRIX dell'I FreeBSD fd
+% LocalWords: fork exec umask SOURCE creat filedes EBADF EINTR EIO locking off
+% LocalWords: behind sync flush shutdown whence ESPIPE socket EINVAL INCR XTND
+% LocalWords: SEEK CUR EPIPE ssize void buf size count EAGAIN EWOULDBLOCK log
+% LocalWords: Specification pwrite pread EFBIG SIGPIPE nell'inode dall'inode
+% LocalWords: CLOEXEC stat fsync cache update l'update bdflush Documentation
+% LocalWords: fdatasync fstat ext dup oldfd newfd DUPFD cmd long arg flock pid
+% LocalWords: SETFD GETFD GETFL SETFL GETLK SETLK SETLKW GETOWN group SIGURG
+% LocalWords: SETOWN GETSIG SETSIG sigaction SIGINFO siginfo SETLEASE lease is
+% LocalWords: truncate GETLEASE NOTIFY all'I AND ACCMODE ioctl everything argp
+% LocalWords: framebuffer request ENOTTY CDROM nell'header magic number
+% LocalWords: FIOCLEX FIONCLEX FIOASYNC FIONBIO
%% ipc.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
messaggio ricevuto.
Proviamo allora il nostro nuovo sistema, al solito occorre definire
-\code{LD\_LIBRAY\_PATH} per accedere alla libreria \file{libgapil.so}, dopo di
+\code{LD\_LIBRARY\_PATH} per accedere alla libreria \file{libgapil.so}, dopo di
che, in maniera del tutto analoga a quanto fatto con il programma che usa le
fifo, potremo far partire il server con:
\begin{verbatim}
\var{shm\_perm.uid} e \var{shm\_perm.gid} occorre essere il proprietario o
il creatore del segmento, oppure l'amministratore. Compiuta l'operazione
aggiorna anche il valore del campo \var{shm\_ctime}.
-\item[\const{SHM\_LOCK}] Abilita il \textit{memory
- locking}\itindex{memory~locking}\footnote{impedisce cioè che la memoria
- usata per il segmento venga salvata su disco dal meccanismo della memoria
+\item[\const{SHM\_LOCK}] Abilita il \textit{memory locking}
+ \itindex{memory~locking}\footnote{impedisce cioè che la memoria usata per il
+ segmento venga salvata su disco dal meccanismo della memoria
virtuale\index{memoria~virtuale}; si ricordi quanto trattato in
sez.~\ref{sec:proc_mem_lock}.} sul segmento di memoria condivisa. Solo
l'amministratore può utilizzare questo comando.
-\item[\const{SHM\_UNLOCK}] Disabilita il \textit{memory
- locking}\itindex{memory~locking} sul segmento di memoria condivisa. Solo
+\item[\const{SHM\_UNLOCK}] Disabilita il \textit{memory locking}
+ \itindex{memory~locking} sul segmento di memoria condivisa. Solo
l'amministratore può utilizzare questo comando.
\end{basedescript}
i primi tre comandi sono gli stessi già visti anche per le code di messaggi e
sgancia dal processo e poi lo rimuove. Il primo passo (\texttt{\small 37}) è
la chiamata a \func{shmdt} per sganciare il segmento, restituendo
(\texttt{\small 38--39}) un valore -1 in caso di errore. Il passo successivo
-(\texttt{\small 41}) è utilizzare \func{shmget} per ottenre l'identificatore
+(\texttt{\small 41}) è utilizzare \func{shmget} per ottenere l'identificatore
associato al segmento data la chiave \var{key}. Al solito si restituisce un
valore di -1 (\texttt{\small 42--45}) in caso di errore, mentre se tutto va
bene si conclude restituendo un valore nullo.
riga di comando (che si limitano alla eventuale stampa di un messaggio di
aiuto a video ed all'impostazione della durata dell'intervallo con cui viene
ripetuto il calcolo delle proprietà della directory) controlla (\texttt{\small
- 20--23}) che sia stato specificato l'argoemnto necessario contenente il nome
+ 20--23}) che sia stato specificato l'argomento necessario contenente il nome
della directory da tenere sotto controllo, senza il quale esce immediatamente
con un messaggio di errore.
sez.~\ref{sec:file_open}) che prevede\footnote{questo è quanto dettato dallo
standard POSIX.1, ciò non toglie che in alcune implementazioni questa
tecnica possa non funzionare; in particolare per Linux, nel caso di NFS, si
- è comunque soggetti alla possibilità di una \textit{race
- condition}\itindex{race~condition}.} che essa ritorni un errore quando
-usata con i flag di \const{O\_CREAT} e \const{O\_EXCL}. In tal modo la
-creazione di un \textsl{file di lock} può essere eseguita atomicamente, il
-processo che crea il file con successo si può considerare come titolare del
-lock (e della risorsa ad esso associata) mentre il rilascio si può eseguire
-con una chiamata ad \func{unlink}.
+ è comunque soggetti alla possibilità di una \itindex{race~condition}
+ \textit{race condition}.} che essa ritorni un errore quando usata con i
+flag di \const{O\_CREAT} e \const{O\_EXCL}. In tal modo la creazione di un
+\textsl{file di lock} può essere eseguita atomicamente, il processo che crea
+il file con successo si può considerare come titolare del lock (e della
+risorsa ad esso associata) mentre il rilascio si può eseguire con una chiamata
+ad \func{unlink}.
Un esempio dell'uso di questa funzione è mostrato dalle funzioni
\func{LockFile} ed \func{UnlockFile} riportate in fig.~\ref{fig:ipc_file_lock}
Anche in questo caso il comportamento della funzione è analogo a quello di
\func{unlink} per i file,\footnote{di nuovo l'implementazione di Linux usa
- direttamente \func{unlink}.} la funzione rimove la coda \param{name}, così
+ direttamente \func{unlink}.} la funzione rimuove la coda \param{name}, così
che una successiva chiamata a \func{mq\_open} fallisce o crea una coda
diversa.
\param{name}. Come già spiegato in sez.~\ref{sec:ipc_posix_generic} questo nome
può essere specificato in forma standard solo facendolo iniziare per \file{/}
e senza ulteriori \file{/}, Linux supporta comunque nomi generici, che
-verranno intepretati prendendo come radice \file{/dev/shm}.\footnote{occorre
+verranno interpretati prendendo come radice \file{/dev/shm}.\footnote{occorre
pertanto evitare di specificare qualcosa del tipo \file{/dev/shm/nome}
all'interno di \param{name}, perché questo comporta, da parte delle funzioni
- di libereria, il tentativo di accedere a \file{/dev/shm/dev/shm/nome}.}
+ di libreria, il tentativo di accedere a \file{/dev/shm/dev/shm/nome}.}
La funzione è del tutto analoga ad \func{open} ed analoghi sono i valori che
possono essere specificati per \param{oflag}, che deve essere specificato come
avveniva con i segmenti del SysV IPC gli oggetti allocati nel kernel vengono
rilasciati automaticamente quando nessuna li usa più, tutto quello che c'è da
fare (\texttt{\small 44}) in questo caso è chiamare \func{shm\_unlink},
-retituendo al chiamante il valore di ritorno.
+restituendo al chiamante il valore di ritorno.
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: like fifo System POSIX RPC Calls Common Object Request Brocker
+% LocalWords: Architecture descriptor kernel unistd int filedes errno EMFILE
+% LocalWords: ENFILE EFAULT BUF sez fig fork Stevens siblings EOF read SIGPIPE
+% LocalWords: EPIPE shell CGI Gateway Interface HTML JPEG URL mime type gs dup
+% LocalWords: barcode PostScript race condition stream BarCodePage WriteMess
+% LocalWords: size PS switch wait popen pclose stdio const char command NULL
+% LocalWords: EINVAL cap fully buffered Ghostscript l'Encapsulated epstopsf of
+% LocalWords: PDF EPS lseek ESPIPE PPM Portable PixMap format pnmcrop PNG pnm
+% LocalWords: pnmmargin png BarCode inode filesystem l'inode mknod mkfifo RDWR
+% LocalWords: ENXIO deadlock client reinviate fortunes fortunefilename daemon
+% LocalWords: FortuneServer FortuneParse FortuneClient pid libgapil LD LIBR<ARY
+% LocalWords: PATH linker pathname ps tmp killall fortuned crash socket domain
+% LocalWords: socketpair BSD sys protocol sv EAFNOSUPPORT EPROTONOSUPPORT AF
+% LocalWords: EOPNOTSUPP SOCK SysV IPC Process Comunication ipc perm key exec
+% LocalWords: header ftok proj stat libc SunOS glibc XPG dell'inode number uid
+% LocalWords: cuid cgid gid tab MSG shift group umask seq MSGMNI SEMMNI SHMMNI
+% LocalWords: shmmni msgmni sem sysctl IPCMNI IPCTestId msgget EACCES EEXIST
+% LocalWords: CREAT EXCL EIDRM ENOENT ENOSPC ENOMEM novo proc MSGMAX msgmax ds
+% LocalWords: MSGMNB msgmnb linked list msqid msgid linux msg qnum lspid lrpid
+% LocalWords: rtime ctime qbytes first last cbytes msgctl semctl shmctl ioctl
+% LocalWords: cmd struct buf EPERM RMID msgsnd msgbuf msgp msgsz msgflg EAGAIN
+% LocalWords: NOWAIT EINTR mtype mtext long message sizeof LENGTH ts sleep BIG
+% LocalWords: msgrcv ssize msgtyp NOERROR EXCEPT ENOMSG multiplexing select ls
+% LocalWords: poll polling queue MQFortuneServer write init HandSIGTERM
+% LocalWords: MQFortuneClient mqfortuned mutex risorse' inter semaphore semget
+% LocalWords: nsems SEMMNS SEMMSL semid otime semval sempid semncnt semzcnt nr
+% LocalWords: SEMVMX SEMOPM semop SEMMNU SEMUME SEMAEM semnum union semun arg
+% LocalWords: ERANGE SETALL SETVAL GETALL array GETNCNT GETPID GETVAL GETZCNT
+% LocalWords: sembuf sops unsigned nsops UNDO flg nsop num undo pending semadj
+% LocalWords: sleeper scheduler running next semundo MutexCreate semunion lock
+% LocalWords: MutexFind wrapper MutexRead MutexLock MutexUnlock unlock locking
+% LocalWords: MutexRemove shmget SHMALL SHMMAX SHMMIN shmid shm segsz atime FD
+% LocalWords: dtime lpid cpid nattac shmall shmmax SHMLBA SHMSEG EOVERFLOW brk
+% LocalWords: memory shmat shmdt void shmaddr shmflg SVID RND RDONLY rounded
+% LocalWords: SIGSEGV nattch exit SharedMem ShmCreate memset fill ShmFind home
+% LocalWords: ShmRemove DirMonitor DirProp chdir GaPiL shmptr DirScan ipcs NFS
+% LocalWords: ComputeValues ReadMonitor touch SIGTERM dirmonitor unlink fcntl
+% LocalWords: LockFile UnlockFile CreateMutex FindMutex LockMutex SETLKW GETLK
+% LocalWords: UnlockMutex RemoveMutex ReadMutex UNLCK WRLCK RDLCK mapping MAP
+% LocalWords: SHARED ANONYMOUS thread patch names strace system call userid Di
+% LocalWords: groupid Michal Wronski Krzysztof Benedyczak wrona posix mqueue
+% LocalWords: lmqueue gcc mount mqd name oflag attr maxmsg msgsize receive ptr
+% LocalWords: send WRONLY NONBLOCK close mqdes EBADF getattr setattr mqstat
+% LocalWords: omqstat curmsgs flags timedsend len prio timespec abs EMSGSIZE
+% LocalWords: ETIMEDOUT timedreceive getaddr notify sigevent notification l'I
+% LocalWords: EBUSY sigev SIGNAL signo value sigval siginfo all'userid MESGQ
+% LocalWords: Konstantin Knizhnik futex tmpfs ramfs cache shared swap CONFIG
+% LocalWords: lrt blocks PAGECACHE TRUNC CLOEXEC mmap ftruncate munmap FindShm
+% LocalWords: CreateShm RemoveShm
%% netlayer.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
livello di rete.\footnote{per la spiegazione della suddivisione in livelli dei
protocolli di rete, si faccia riferimento a quanto illustrato in
sez.~\ref{sec:net_protocols}.} Per ciascuno di essi forniremo una descrizione
-generica delle principlai caratteristiche, del formato di dati usato e quanto
+generica delle principali caratteristiche, del formato di dati usato e quanto
possa essere necessario per capirne meglio il funzionamento dal punto di vista
della programmazione.
-Data la loro prevelenza il capitolo sarà sostanzialmente incentrato sui due
+Data la loro prevalenza il capitolo sarà sostanzialmente incentrato sui due
protocolli principali esistenti su questo livello: il protocollo IP, sigla che
sta per \textit{Internet Protocol}, (ma che più propriamente si dovrebbe
chiamare IPv4) ed la nuova versione di questo stesso protocollo, denominata
Inoltre, in particolare per le reti di classe C, la presenza di tanti
indirizzi di rete diversi comporta una crescita enorme delle tabelle di
instradamento che ciascun router dovrebbe tenere in memoria per sapere dove
-inviare il pacchetto, con conseguente crescita dei tempi di processo da parte
-di questi ultimi ed inefficienza nel trasporto.
+inviare il pacchetto, con conseguente crescita dei tempi di elaborazione da
+parte di questi ultimi ed inefficienza nel trasporto.
\begin{table}[htb]
\centering
\label{sec:IP_ipv6over}
Per rispondere alle esigenze descritte in sez.~\ref{sec:IP_whyipv6} IPv6 nasce
-come evoluzione di IPv4, mantendone inalterate le funzioni che si sono
+come evoluzione di IPv4, mantenendone inalterate le funzioni che si sono
dimostrate valide, eliminando quelle inutili e aggiungendone poche altre
ponendo al contempo una grande attenzione a mantenere il protocollo il più
snello e veloce possibile.
\textit{multicast}
\item la semplificazione del formato dell'intestazione, eliminando o rendendo
opzionali alcuni dei campi di IPv4, per eliminare la necessità di
- riprocessamento della stessa da parte dei router e contenere l'aumento di
+ riprocessare la stessa da parte dei router e contenere l'aumento di
dimensione dovuto ai nuovi indirizzi
\item un supporto per le opzioni migliorato, per garantire una trasmissione
più efficiente del traffico normale, limiti meno stringenti sulle
\end{center}
\end{table}
-Abbiamo già anticipato in sez.~\ref{sec:IP_ipv6over} uno dei criteri principali
-nella progettazione di IPv6 è stato quello di ridurre al minimo il tempo di
-processamento dei pacchetti da parte dei router, un confronto con
+Abbiamo già anticipato in sez.~\ref{sec:IP_ipv6over} uno dei criteri
+principali nella progettazione di IPv6 è stato quello di ridurre al minimo il
+tempo di elaborazione dei pacchetti da parte dei router, un confronto con
l'intestazione di IPv4 (vedi fig.~\ref{fig:IP_ipv4_head}) mostra le seguenti
differenze:
veloce il processo da parte di computer con processori a 64 bit.
\item i campi per gestire la frammentazione (\textit{identification},
\textit{flag} e \textit{fragment offset}) sono stati eliminati; questo
- perché la frammentazione è un'eccezione che non deve rallentare il
- processo dei pacchetti nel caso normale.
+ perché la frammentazione è un'eccezione che non deve rallentare
+ l'elaborazione dei pacchetti nel caso normale.
\item è stato eliminato il campo \textit{checksum} in quanto tutti i
protocolli di livello superiore (TCP, UDP e ICMPv6) hanno un campo di
checksum che include, oltre alla loro intestazione e ai dati, pure i campi
di destinazione; una checksum esiste anche per la gran parte protocolli di
livello inferiore (anche se quelli che non lo hanno, come SLIP, non possono
essere usati con grande affidabilità); con questa scelta si è ridotto di
- molti tempo di riprocessamento dato che i router non hanno più la
- necessità di ricalcolare la checksum ad ogni passaggio di un pacchetto per
- il cambiamento del campo \textit{hop limit}.
+ molto il tempo di elaborazione dato che i router non hanno più la necessità
+ di ricalcolare la checksum ad ogni passaggio di un pacchetto per il
+ cambiamento del campo \textit{hop limit}.
\item è stato eliminato il campo \textit{type of service}, che praticamente
non è mai stato utilizzato; una parte delle funzionalità ad esso delegate
sono state reimplementate (vedi il campo \textit{priority} al prossimo
Gli indirizzi di uso locale consentono ad una organizzazione che non è
(ancora) connessa ad Internet di operare senza richiedere un prefisso globale,
una volta che in seguito l'organizzazione venisse connessa a Internet
-potrebbe con4tinuare a usare la stessa suddivisione effettuata con gli
+potrebbe continuare a usare la stessa suddivisione effettuata con gli
indirizzi \textit{site-local} utilizzando un prefisso globale e la
rinumerazione degli indirizzi delle singole macchine sarebbe automatica.
\textit{extension header}) poste fra l'intestazione di IPv6 e l'intestazione
del protocollo di trasporto.
-Per aumentare la velocità di processo, sia dei dati del livello seguente che
-di ulteriori opzioni, ciascuna estensione deve avere una lunghezza multipla di
-8 byte per mantenere l'allineamento a 64~bit di tutti le intestazioni
-seguenti.
+Per aumentare la velocità di elaborazione, sia dei dati del livello seguente
+che di ulteriori opzioni, ciascuna estensione deve avere una lunghezza
+multipla di 8 byte per mantenere l'allineamento a 64~bit di tutti le
+intestazioni seguenti.
Dato che la maggior parte di queste estensioni non sono esaminate dai router
durante l'instradamento e la trasmissione dei pacchetti, ma solo all'arrivo
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: sez Protocol IPv dall' RFC Ethernet Token FDDI Universal host of
+% LocalWords: addressing Best effort l'host router IANA Assigned Number tab to
+% LocalWords: Authority quest'ultime multicast group reserved for CIDR Domain
+% LocalWords: Classless Routing TOS Type Service IPTOS LOWDELAY THROUGHPUT QoS
+% LocalWords: RELIABILITY MINCOST optval anycast unicast fig header version FE
+% LocalWords: priority flow label payload length next hop limit live source FF
+% LocalWords: destination identification fragment checksum TCP UDP ICMPv type
+% LocalWords: service head total fragmentation protocol broadcast broadcasting
+% LocalWords: multicasting path MTU discovery NSAP IPX based geografic local
+% LocalWords: routing format prefix nell' Registry Subscriber Intra Regional
+% LocalWords: Register INTERNIC NCC APNIC subscriber Interface MAC address Reg
+% LocalWords: Subnet Naz Prov Subscr FEBF bootstrap FEC FEFF DNS socket FFFF
+% LocalWords: sull'host loopback scop all nodes routers rip cbt name dhcp HBH
+% LocalWords: agents servers relays solicited extension options route Keyword
+% LocalWords: Authentication Encapsulation ICMP Control Message GGP Gateway ST
+% LocalWords: encapsulation Stream Trasmission Datagram RH FH IDRP ESP Null
+% LocalWords: Encrypted Security IGRP OSPF Short First tunnelling FFFFFF hash
+% LocalWords: news FTP NFS authentication Parameter Index ICV Integrity Value
+% LocalWords: padding Option gateway dell'MD keyed Encripted IEEE ethernet
+% LocalWords: dell'autoconfigurazione L'autoconfigurazione Solicitation
+% LocalWords: stateless solicitation Advertisement stateful
+% LocalWords: l'autoconfigurazione
%% network.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
Il modello ISO/OSI è stato sviluppato in corrispondenza alla definizione della
serie di protocolli X.25 per la commutazione di pacchetto; come si vede è un
modello abbastanza complesso\footnote{infatti per memorizzarne i vari livelli
- è stata creata la frase \texttt{All people seem to need data processing}, in
+ è stata creata la frase \textit{All people seem to need data processing}, in
cui ciascuna parola corrisponde all'iniziale di uno dei livelli.}, tanto che
usualmente si tende a suddividerlo in due parti, secondo lo schema mostrato in
fig.~\ref{fig:net_osi_tcpip_comp}, con un \textit{upper layer} che riguarda
internet ha iniziato a far emergere i vari limiti di IPv4, per risolverne i
problemi si è perciò definita una nuova versione del protocollo, che (saltando
un numero) è diventata la versione 6. IPv6 nasce quindi come evoluzione di
-IPv4, mantendone inalterate le funzioni che si sono dimostrate valide,
+IPv4, mantenendone inalterate le funzioni che si sono dimostrate valide,
eliminando quelle inutili e aggiungendone poche altre per mantenere il
protocollo il più snello e veloce possibile.
\textit{multicast}.
\item la semplificazione del formato dell'intestazione (\textit{header}) dei
pacchetti, eliminando o rendendo opzionali alcuni dei campi di IPv4, per
- eliminare la necessità di riprocessamento della stessa da parte dei router e
+ eliminare la necessità di rielaborazione della stessa da parte dei router e
contenere l'aumento di dimensione dovuto all'ampliamento degli indirizzi.
\item un supporto per le opzioni migliorato, per garantire una trasmissione
più efficiente del traffico normale, limiti meno stringenti sulle dimensioni
pacchetti vengano duplicati nella trasmissione, e non solo perduti. Di tutto
questo di nuovo deve tenere conto l'applicazione.
-Un'altro aspetto di UDP è che se un pacchetto raggiunge correttamente la
+Un altro aspetto di UDP è che se un pacchetto raggiunge correttamente la
destinazione esso viene passato all'applicazione ricevente in tutta la sua
lunghezza, la trasmissione avviene perciò per \textit{record} la cui lunghezza
viene anche essa trasmessa all'applicazione all'atto del ricevimento.
\label{sec:net_lim_dim}
Un aspetto di cui bisogna tenere conto nella programmazione di rete, e che
-ritornerà in seguito, quando tratteremo gli aspetti più avanzti, è che ci sono
+ritornerà in seguito, quando tratteremo gli aspetti più avanzati, è che ci sono
una serie di limiti a cui la trasmissione dei dati attraverso i vari livelli
del protocollo deve sottostare; limiti che è opportuno tenere presente perché
in certi casi si possono avere delle conseguenze sul comportamento delle
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: TCP multitasking client ftp telnet ssh cap thread peer to three
+% LocalWords: Napster routing tier two middle International Standards Systems
+% LocalWords: Organization Interconnection tab Application Presentation All of
+% LocalWords: Session Transport DataLink Physical people seem need processing
+% LocalWords: fig upper layer lower kernel DoD Department Defense Connection
+% LocalWords: sez UDP ICMP IGMP device Trasmission Control Protocol l'IP l'UDP
+% LocalWords: IPv ethernet SMTP RFC Request For Comment socket stack PPP ARP
+% LocalWords: router instradatori version RARP l'autoconfigurazione anycast Di
+% LocalWords: l'acknoweledgment Datagram Message host ping ICPMv ICMPv Group
+% LocalWords: multicast Address Resolution broadcast Token FDDI MAC address DF
+% LocalWords: Reverse EGP Exterior Gateway gateway autonomous systems OSPF GRE
+% LocalWords: Shortest Path First Generic Encapsulation Authentication Header
+% LocalWords: IPSEC ESP Encapsulating Security Payload Point Line over raw QoS
+% LocalWords: dall' Universal addressing Best effort unicast header dell' RTT
+% LocalWords: datagram connectionless streaming nell' acknowlegment trip flow
+% LocalWords: segment control advertised window nell'header dell'header option
+% LocalWords: payload MTU Transfer Unit Hyperlink IBM Mbit sec IEEE path but
+% LocalWords: dell'MTU destination unreachable fragmentation needed packet too
+% LocalWords: big discovery MSS Size
%% othersock.tex
%%
-%% Copyright (C) 2004-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2004-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
Benché i socket Unix domain, come meccanismo di comunicazione fra processi che
girano sulla stessa macchina, non siano strettamente attinenti alla rete, li
-tratteremo comunque in questa sezione. Nonstante le loro peculiarità infatti,
+tratteremo comunque in questa sezione. Nonostante le loro peculiarità infatti,
l'interfaccia di programmazione che serve ad utilizzarli resta sempre quella
dei socket.
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: socket cap TCP UDP domain sez NFS DNS stream datagram PF INET to
+% LocalWords: IPv tab SOCK DGRAM three way handshake client fig bind listen AF
+% LocalWords: accept recvfrom sendto connect netstat named DHCP kernel ICMP CR
+% LocalWords: port unreachable read write glibc Specification flags int BSD LF
+% LocalWords: libc unsigned len size tolen sys ssize sockfd const void buf MSG
+% LocalWords: struct sockaddr socklen errno EAGAIN ECONNRESET EDESTADDRREQ RFC
+% LocalWords: EISCONN EMSGSIZE ENOBUFS ENOTCONN EOPNOTSUPP EPIPE SIGPIPE EBADF
+% LocalWords: NOSIGNAL EFAULT EINVAL EINTR ENOMEM ENOTSOCK NULL fromlen from
+% LocalWords: ECONNREFUSED value result argument close shutdown daytime nell'
+% LocalWords: memset inet pton nread NUL superdemone inetd sniffer daytimed
+% LocalWords: INADDR ANY addr echo ClientEcho sendbuff serv VPN tcpdump l'I
+% LocalWords: Stevens destination descriptor raw stack netlink
%% preambolo.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
\chapter{Un preambolo}
\label{cha:preamble}
-Questa guida nasce dalla mia profonda convizione che le istanze di libertà e
+Questa guida nasce dalla mia profonda convinzione che le istanze di libertà e
di condivisione della conoscenza che hanno dato vita a quello straordinario
movimento di persone ed intelligenza che va sotto il nome di \textsl{software
libero} hanno la stessa rilevanza anche quando applicate alla produzione
Per questo motivo la Free Software Foundation ha creato una apposita licenza
che potesse giocare lo stesso ruolo fondamentale che la GPL ha avuto per il
-software libero nel garartire la permanenza delle libertà date, ma potesse
+software libero nel garantire la permanenza delle libertà date, ma potesse
anche tenere conto delle differenze che comunque ci sono fra un testo ed un
programma.
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: Foundation FDL
%% pref.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: kernel Library glibc Stevens Reference Manual GCC
%% process.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
e le informazioni dello stato del chiamante (tipo il contenuto di alcuni
registri della CPU), poi la funzione chiamata alloca qui lo spazio per le
sue variabili locali. Tutti questi dati vengono \textit{impilati} (da questo
- viene il nome \textit{stack}) in sequenza uno sull'altro; in questo modo le
- funzioni possono essere chiamate ricorsivamente. Al ritorno della funzione
- lo spazio è automaticamente rilasciato e ``\textsl{ripulito}''. La pulizia
- in C e C++ viene fatta dal chiamante.\footnote{a meno che non sia stato
- specificato l'utilizzo di una calling convention diversa da quella
- standard.}
+ viene il nome \itindex{stack} \textit{stack}) in sequenza uno sull'altro; in
+ questo modo le funzioni possono essere chiamate ricorsivamente. Al ritorno
+ della funzione lo spazio è automaticamente rilasciato e
+ ``\textsl{ripulito}''. La pulizia in C e C++ viene fatta dal
+ chiamante.\footnote{a meno che non sia stato specificato l'utilizzo di una
+ calling convention diversa da quella standard.}
% TODO verificare le modalità di cambiamento della calling convention
La dimensione di questo segmento aumenta seguendo la crescita dello
- \textit{stack} del programma, ma non viene ridotta quando quest'ultimo si
- restringe.
+ \itindex{stack} \textit{stack} del programma, ma non viene ridotta quando
+ quest'ultimo si restringe.
\end{enumerate}
\begin{figure}[htb]
l'allocazione dinamica di memoria (in genere nello \itindex{heap} heap).
Le variabili il cui contenuto è allocato in questo modo non potranno essere
-usate direttamente come le altre (quelle nello \itindex{stack} stack), ma
-l'accesso sarà possibile solo in maniera indiretta, attraverso i puntatori
-alla memoria loro riservata che si sono ottenuti dalle funzioni di
-allocazione.
+usate direttamente come le altre (quelle nello \itindex{stack}
+\textit{stack}), ma l'accesso sarà possibile solo in maniera indiretta,
+attraverso i puntatori alla memoria loro riservata che si sono ottenuti dalle
+funzioni di allocazione.
\subsection{Le funzioni \func{malloc}, \func{calloc}, \func{realloc} e
Una possibile alternativa all'uso di \func{malloc}, che non soffre dei
problemi di \textit{memory leak}\itindex{memory~leak} descritti in precedenza,
è la funzione \funcd{alloca}, che invece di allocare la memoria nello
-\itindex{heap}\textit{heap} usa il segmento di \itindex{stack}\textit{stack}
+\itindex{heap}\textit{heap} usa il segmento di \itindex{stack} \textit{stack}
della funzione corrente. La sintassi è identica a quella di \func{malloc}, il
suo prototipo è:
\begin{prototype}{stdlib.h}{void *alloca(size\_t size)}
\end{prototype}
La funzione alloca la quantità di memoria (non inizializzata) richiesta
-dall'argomento \param{size} nel segmento di \itindex{stack}stack della
-funzione chiamante. Con questa funzione non è più necessario liberare la
-memoria allocata (e quindi non esiste un analogo della \func{free}) in quanto
-essa viene rilasciata automaticamente al ritorno della funzione.
+dall'argomento \param{size} nel segmento di \itindex{stack} \textit{stack}
+della funzione chiamante. Con questa funzione non è più necessario liberare
+la memoria allocata (e quindi non esiste un analogo della \func{free}) in
+quanto essa viene rilasciata automaticamente al ritorno della funzione.
Come è evidente questa funzione ha molti vantaggi, anzitutto permette di
evitare alla radice i problemi di \textit{memory leak}\itindex{memory~leak},
%% session.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
il cui scopo è quello di permettere ad un utente di poter sfruttare le
capacità multitasking di un sistema Unix per eseguire in contemporanea più
processi, pur potendo accedere, di solito, ad un solo terminale,\footnote{con
- X e con i terminali virtuali tutto questo non è più vero, dato che si può
- accedere a molti terminali in contemporanea da una singola postazione di
- lavoro, ma il sistema è nato prima dell'esistenza di tutto ciò.} avendo cioè
-un solo punto in cui si può avere accesso all'input ed all'output degli
-stessi.
+ \textit{X Window} e con i terminali virtuali tutto questo non è più vero,
+ dato che si può accedere a molti terminali in contemporanea da una singola
+ postazione di lavoro, ma il sistema è nato prima dell'esistenza di tutto
+ ciò.} avendo cioè un solo punto in cui si può avere accesso all'input ed
+all'output degli stessi.
\subsection{Una panoramica introduttiva}
negli anni '80, e successivamente standardizzata da POSIX.1; la sua
disponibilità nel sistema è verificabile attraverso il controllo della macro
\macro{\_POSIX\_JOB\_CONTROL}. In generale il \textit{job control} richiede il
-supporto sia da parte della shell (quasi tutte ormai lo fanno), che da parte
+supporto sia da parte della shell (quasi tutte ormai lo hanno), che da parte
del kernel; in particolare il kernel deve assicurare sia la presenza di un
driver per i terminali abilitato al \textit{job control} che quella dei
relativi segnali illustrati in sez.~\ref{sec:sig_job_control}.
\itindex{process~group} \textit{process group}, e di aprire il terminale (che
così diventa il terminale di controllo della sessione) in lettura sullo
standard input ed in scrittura sullo standard output e sullo standard error;
-inoltre effettuerà, qualora servano, ulteriori settaggi.\footnote{ad esempio,
- come qualcuno si sarà accorto scrivendo un nome di login in maiuscolo, può
- effettuare la conversione automatica dell'input in minuscolo, ponendosi in
- una modalità speciale che non distingue fra i due tipi di caratteri (a
- beneficio di alcuni vecchi terminali che non supportavano le minuscole).}
-Alla fine il programma stamperà un messaggio di benvenuto per poi porsi in
-attesa dell'immissione del nome di un utente.
+inoltre effettuerà, qualora servano, ulteriori impostazioni.\footnote{ad
+ esempio, come qualcuno si sarà accorto scrivendo un nome di login in
+ maiuscolo, può effettuare la conversione automatica dell'input in minuscolo,
+ ponendosi in una modalità speciale che non distingue fra i due tipi di
+ caratteri (a beneficio di alcuni vecchi terminali che non supportavano le
+ minuscole).} Alla fine il programma stamperà un messaggio di benvenuto per
+poi porsi in attesa dell'immissione del nome di un utente.
Una volta che si sia immesso il nome di login \cmd{getty} esegue direttamente
il programma \cmd{login} con una \func{exevle}, passando come argomento la
Le \acr{glibc} definiscono una serie di funzioni standard con cui un processo
può accedere in maniera generica al servizio di \textit{syslog}, che però
-funzionano solo localmente; se si vogliono inviare i messaggi ad un'altro
+funzionano solo localmente; se si vogliono inviare i messaggi ad un altro
sistema occorre farlo esplicitamente con un socket\index{socket} UDP, o
utilizzare le capacità di reinvio del servizio.
automaticamente un avviso (un carattere di BELL, che provoca un beep)
sull'output quando si eccedono le dimensioni della coda. Se è abilitato il
modo canonico i caratteri in ingresso restano nella coda fintanto che non
-viene ricevuto un a capo; un'altro parametro del sistema, \const{MAX\_CANON},
+viene ricevuto un a capo; un altro parametro del sistema, \const{MAX\_CANON},
specifica la dimensione massima di una riga in modo canonico.
La coda di uscita è analoga a quella di ingresso e contiene i caratteri
\func{open} senza aver specificato il flag di
\const{O\_NOBLOCK} si bloccherà il processo finché
non si è stabilita una connessione con il modem; inoltre
- se viene rilevata una disconessione viene inviato un
+ se viene rilevata una disconnessione viene inviato un
\const{SIGHUP} al processo di controllo del terminale. La
lettura su un terminale sconnesso comporta una condizione
di \textit{end of file} e la scrittura un errore di
Il terzo flag, mantenuto nel campo \var{c\_cflag}, è detto \textsl{flag di
controllo} ed è legato al funzionamento delle linee seriali, permettendo di
-impostarne varie caratteristiche, come il numero di bit di stop, i settaggi
-della parità, il funzionamento del controllo di flusso; esso ha senso solo per
-i terminali connessi a linee seriali. Un elenco dei vari bit, del loro
-significato e delle costanti utilizzate per identificarli è riportato in
-tab.~\ref{tab:sess_termios_cflag}.
+impostarne varie caratteristiche, come il numero di bit di stop, le
+impostazioni della parità, il funzionamento del controllo di flusso; esso ha
+senso solo per i terminali connessi a linee seriali. Un elenco dei vari bit,
+del loro significato e delle costanti utilizzate per identificarli è riportato
+in tab.~\ref{tab:sess_termios_cflag}.
I valori di questo flag sono molto specifici, e completamente indirizzati al
controllo di un terminale mantenuto su una linea seriale; essi pertanto non
\const{ECHO}. \\
\const{ECHOCTL}& Se impostato insieme ad \const{ECHO} i caratteri di
controllo ASCII (tranne TAB, NL, START, e STOP) sono
- mostrati nella forma che prepende un \verb|^| alla
+ mostrati nella forma che prepone un \verb|^| alla
lettera ottenuta sommando \texttt{0x40} al valore del
carattere (di solito questi si possono ottenere anche
direttamente premendo il tasto \texttt{ctrl} più la
essere interpretati. \\
\const{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso
e uscita quando vengono emessi i segnali \const{SIGINT},
- \const{SIGQUIT} and \const{SIGSUSP}.\\
+ \const{SIGQUIT} e \const{SIGSUSP}.\\
\const{TOSTOP} & Se abilitato, con il supporto per il job control presente,
genera il segnale \const{SIGTTOU} per un processo in
background che cerca di scrivere sul terminale.\\
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: kernel multitasking dell'I job control BSD POSIX shell sez group
+% LocalWords: foreground process bg fg Di waitpid WUNTRACED pgrp session sched
+% LocalWords: struct pgid sid pid ps getpgid getpgrp SVr unistd void errno int
+% LocalWords: ESRCH getsid glibc system call XOPEN SOURCE EPERM setpgrp EACCES
+% LocalWords: setpgid exec EINVAL did fork race condition setsid l'I tty ioctl
+% LocalWords: NOCTTY TIOCSCTTY error tcsetpgrp termios fd pgrpid descriptor VT
+% LocalWords: ENOTTY ENOSYS EBADF SIGTTIN SIGTTOU EIO tcgetpgrp crypt SIGTSTP
+% LocalWords: SIGINT SIGQUIT SIGTERM SIGHUP hungup kill orphaned SIGCONT exit
+% LocalWords: init Slackware run level inittab fig device getty exevle TERM at
+% LocalWords: getpwnam chdir home chown chmod setuid setgid initgroups SIGCHLD
+% LocalWords: daemon like daemons NdT Stevens Programming FAQ filesystem umask
+% LocalWords: noclose syslog syslogd socket UDP klogd printk printf facility
+% LocalWords: priority log openlog const char ident option argv tab AUTH CRON
+% LocalWords: AUTHPRIV cron FTP KERN LOCAL LPR NEWS news USENET UUCP CONS CRIT
+% LocalWords: NDELAY NOWAIT ODELAY PERROR stderr format strerror EMERG ALERT
+% LocalWords: ERR WARNING NOTICE INFO DEBUG debug setlogmask mask UPTO za ssh
+% LocalWords: teletype telnet read write BELL beep CANON isatty desc ttyname
+% LocalWords: NULL ctermid stdio pathname buff size len ERANGE bits ispeed xFF
+% LocalWords: ospeed line tcflag INPCK IGNPAR PARMRK ISTRIP IGNBRK BREAK NUL
+% LocalWords: BRKINT IGNCR carriage return newline ICRNL INLCR IUCLC IXON NL
+% LocalWords: IXANY IXOFF IMAXBEL iflag OPOST CR OCRNL OLCUC ONLCR ONOCR OFILL
+% LocalWords: ONLRET OFDEL NLDLY CRDLY TABDLY BSDLY backspace BS VTDLY FFDLY
+% LocalWords: form feed FF oflag CLOCAL NOBLOCK of HUPCL CREAD CSTOPB PARENB
+% LocalWords: PARODD CSIZE CS CBAUD CBAUDEX CIBAUD CRTSCTS RTS CTS cflag ECHO
+% LocalWords: ICANON ECHOE ERASE ECHOPRT ECHOK ECHOKE ECHONL ECHOCTL ctrl ISIG
+% LocalWords: INTR QUIT SUSP IEXTEN EOL LNEXT REPRINT WERASE NOFLSH and TOSTOP
+% LocalWords: SIGSUSP XCASE DEFECHO FLUSHO DISCARD PENDIN lflag NCCS VINTR EOF
+% LocalWords: interrupt VQUIT VERASE VKILL VEOF VTIME VMIN VSWTC switch VSTART
+% LocalWords: VSTOP VSUSP VEOL VREPRINT VDISCARD VWERASE VLNEXT escape actions
+% LocalWords: tcgetattr tcsetattr EINTR TCSANOW TCSADRAIN TCSAFLUSH speed MIN
+% LocalWords: SetTermAttr UnSetTermAttr cfsetispeed cfsetospeed cfgetispeed
+% LocalWords: cfgetospeed quest'ultime tcsendbreak duration break tcdrain
+% LocalWords: tcflush queue TCIFLUSH TCOFLUSH TCIOFLUSH tcflow action TCOOFF
+% LocalWords: TCOON TCIOFF TCION timer openpty
%% signal.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
% LocalWords: RESETHAND RESTART NOMASK NODEFER ONSTACK sigcontext union signo
% LocalWords: siginfo bits uid addr fd inline like blocked atomic sigprocmask
% LocalWords: how oldset BLOCK UNBLOCK SETMASK sigsuspend sigaltstack malloc
-% LocalWords: SIGSTKSZ MINSIGSTKSZ ss oss ENOMEM flags DISABLE sp setrlimit
+% LocalWords: SIGSTKSZ MINSIGSTKSZ ss oss ENOMEM flags DISABLE sp setrlimit LB
% LocalWords: RLIMIT rlim sigsetjmp siglongjmp sigjmp buf env savesigs jmp ptr
% LocalWords: SIGRTMIN SIGRTMAX sigval sival sigevent sigqueue EAGAIN sysctl
-% LocalWords: QUEUE thread sigwait sigwaitinfo sigtimedwait info
+% LocalWords: QUEUE thread sigwait sigwaitinfo sigtimedwait info DEF SLB
%% sockadv.tex
%%
-%% Copyright (C) 2004-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2004-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
-I parametri specifiv
+I parametri specifici
% LocalWords: socket sez dotted decimal resolver Domain Name Service cap DNS
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
-% LocalWords: quest'ultime neigh
+% LocalWords: quest'ultime neigh dev weight cong mod somaxconn
%% socket.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
\textsl{presa}, ma essendo universalmente noti come \textit{socket}
utilizzeremo sempre la parola inglese.} sono uno dei principali meccanismi
di comunicazione utilizzato in ambito Unix, e li abbiamo brevemente incontrati
-in sez.~\ref{sec:ipc_socketpair}, fra i vari meccanismi di intercominazione
+in sez.~\ref{sec:ipc_socketpair}, fra i vari meccanismi di intercomunicazione
fra processi. Un socket costituisce in sostanza un canale di comunicazione fra
due processi su cui si possono leggere e scrivere dati analogo a quello di una
pipe (vedi sez.~\ref{sec:ipc_pipes}) ma, a differenza di questa e degli altri
altri invece li raggruppano in \textsl{pacchetti} (in inglese
\textit{datagram}) che vengono inviati in blocchi separati.
-Un'altro esempio di stile concerne la possibilità che la comunicazione possa o
+Un altro esempio di stile concerne la possibilità che la comunicazione possa o
meno perdere dati, possa o meno non rispettare l'ordine in cui essi non sono
inviati, o inviare dei pacchetti più volte (come nel caso di TCP e UDP).
\const{PF\_ECONET} &19& Acorn Econet & \\
\const{PF\_ATMSVC} &20& ATM SVCs & \\
\const{PF\_SNA} &22& Linux SNA Project & \\
- \const{PF\_IRDA} &23& IRDA sockets & \\
- \const{PF\_PPPOX} &24& PPPoX sockets & \\
- \const{PF\_WANPIPE} &25& Wanpipe API sockets & \\
- \const{PF\_BLUETOOTH}&31& Bluetooth sockets & \\
+ \const{PF\_IRDA} &23& IRDA socket & \\
+ \const{PF\_PPPOX} &24& PPPoX socket & \\
+ \const{PF\_WANPIPE} &25& Wanpipe API socket & \\
+ \const{PF\_BLUETOOTH}&31& Bluetooth socket & \\
\hline
\end{tabular}
\caption{Famiglie di protocolli definiti in Linux.}
una \direct{union} usata per accedere alle diverse classi di indirizzi) che
direttamente come intero. In \file{netinet/in.h} vengono definite anche alcune
costanti che identificano alcuni indirizzi speciali, riportati in
-tab.~\ref{tab:TCP_ipv4_addr}, che reincontreremo più avanti.
+tab.~\ref{tab:TCP_ipv4_addr}, che rincontreremo più avanti.
Infine occorre sottolineare che sia gli indirizzi che i numeri di porta devono
essere specificati in quello che viene chiamato \textit{network order}, cioè
11}) il valore della seconda assumendo che il primo byte sia quello meno
significativo (cioè, per quanto visto in fig.~\ref{fig:sock_endianess}, che sia
\textit{little endian}). Infine la funzione restituisce (\texttt{\small 12})
-il valore del confonto delle due variabili.
+il valore del confronto delle due variabili.
\itindend{endianess}
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: socket sez cap BSD SVr XTI Transport Interface TCP stream UDP PF
+% LocalWords: datagram broadcast descriptor sys int domain type protocol errno
+% LocalWords: EPROTONOSUPPORT ENFILE kernel EMFILE EACCES EINVAL ENOBUFS raw
+% LocalWords: ENOMEM table family AF address name glibc UNSPEC LOCAL Local IPv
+% LocalWords: communication INET protocols ip AX Amateur IPX Novell APPLETALK
+% LocalWords: Appletalk ddp NETROM NetROM Multiprotocol ATMPVC Access to ATM
+% LocalWords: PVCs ITU ipv PLP DECnet Reserved for project NETBEUI LLC KEY key
+% LocalWords: SECURITY Security callback NETLINK interface device netlink Low
+% LocalWords: PACKET level packet ASH Ash ECONET Acorn Econet ATMSVC SVCs SNA
+% LocalWords: IRDA PPPOX PPPoX WANPIPE Wanpipe BLUETOOTH Bluetooth POSIX bits
+% LocalWords: dall'header tab SOCK capabilities capability styles DGRAM read
+% LocalWords: SEQPACKET RDM sockaddr reference void fig Header uint socklen at
+% LocalWords: addr netinet port len Stevens unsigned short casting nell'header
+% LocalWords: BIND SERVICE bind union order big endian flowinfo dell'header ll
+% LocalWords: multicast multicasting local socketpair sun path filesystem AARP
+% LocalWords: pathname AppleTalk netatalk personal Apple ATPROTO atalk sat if
+% LocalWords: ANYNET node ANYNODE ATADDR BCAST pcap IEEE linux ether ETH ALL
+% LocalWords: sll ifindex ethernet halen MAC hatype ARP arp pkttype HOST recv
+% LocalWords: OTHERHOST OUTGOING recvfrom recvmsg endianess little endtest Mac
+% LocalWords: Intel Digital Motorola IBM VME PowerPC l'Intel xABCD ptr htonl
+% LocalWords: all'endianess htons ntohl ntohs long hostlong hostshort netlong
+% LocalWords: sort netshort host inet aton ntoa dotted decimal const char src
+% LocalWords: strptr struct dest addrptr INADDR NULL pton ntop presentation af
+% LocalWords: numeric EAFNOSUPPORT size ENOSPC ENOAFSUPPORT ADDRSTRLEN
%% system.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
Purtroppo la sezione dello standard che tratta questi argomenti è una delle
meno chiare\footnote{tanto che Stevens, in \cite{APUE}, la porta come esempio
- di ``standardese''.}. Lo standard prevede che ci siano 13 macro che
+ di ``\textsl{standardese}''.}. Lo standard prevede che ci siano 13 macro che
descrivono le caratteristiche del sistema (7 per le caratteristiche generiche,
riportate in tab.~\ref{tab:sys_generic_macro}, e 6 per le caratteristiche dei
file, riportate in tab.~\ref{tab:sys_file_macro}).
Si tenga conto che l'aggiornamento di \var{tms\_cutime} e \var{tms\_cstime}
viene eseguito solo quando una chiamata a \func{wait} o \func{waitpid} è
ritornata. Per questo motivo se un processo figlio termina prima di ricevere
-lo stato di terminazione di tutti i suoi figli, questi processi ``nipoti'' non
-verranno considerati nel calcolo di questi tempi.
+lo stato di terminazione di tutti i suoi figli, questi processi
+``\textsl{nipoti}'' non verranno considerati nel calcolo di questi tempi.
\itindend{process~time}
% LocalWords: strftime thread EOF modifiable lvalue app errcode strerror LC at
% LocalWords: perror string errnum MESSAGES error message ErrCode strtol log
% LocalWords: program invocation argv printf print progname exit count fname
-% LocalWords: lineno one
+% LocalWords: lineno one standardese
%% tcpsock.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
(quello del capo che ha eseguito la chiusura attiva) venga perso, chi esegue
la chiusura passiva non ricevendo risposta rimanderà un ulteriore FIN, per
questo motivo chi esegue la chiusura attiva deve mantenere lo stato della
-connessione per essere in grado di reinviare l'ACK e chiuderla correttamente.
+connessione per essere in grado di rinviare l'ACK e chiuderla correttamente.
Se non fosse così la risposta sarebbe un RST (un altro tipo si segmento) che
verrebbe interpretato come un errore.
31}) un messaggio, e si termina (\texttt{\small 32}) immediatamente il
programma.
-Il passo successivo (\texttt{\small 35--39}) è quello di mettere ``in
-ascolto'' il socket; questo viene fatto (\texttt{\small 36}) con la funzione
-\func{listen} che dice al kernel di accettare connessioni per il socket che
-abbiamo creato; la funzione indica inoltre, con il secondo argomento, il
-numero massimo di connessioni che il kernel accetterà di mettere in coda per
-il suddetto socket. Di nuovo in caso di errore si stampa (\texttt{\small 37})
-un messaggio, e si esce (\texttt{\small 38}) immediatamente.
+Il passo successivo (\texttt{\small 35--39}) è quello di mettere ``\textsl{in
+ ascolto}'' il socket; questo viene fatto (\texttt{\small 36}) con la
+funzione \func{listen} che dice al kernel di accettare connessioni per il
+socket che abbiamo creato; la funzione indica inoltre, con il secondo
+argomento, il numero massimo di connessioni che il kernel accetterà di mettere
+in coda per il suddetto socket. Di nuovo in caso di errore si stampa
+(\texttt{\small 37}) un messaggio, e si esce (\texttt{\small 38})
+immediatamente.
La chiamata a \func{listen} completa la preparazione del socket per l'ascolto
(che viene chiamato anche \textit{listening descriptor}) a questo punto si può
In questo caso l'andamento dei primi sette pacchetti è esattamente lo stesso
di prima. Solo che stavolta, non appena inviata la seconda riga, il programma
-si bloccherà nella successiva chiamata a \func{read}, non ottendo nessuna
+si bloccherà nella successiva chiamata a \func{read}, non ottenendo nessuna
risposta. Quello che succede è che nel frattempo il kernel provvede, come
richiesto dal protocollo TCP, a tentare la ritrasmissione della nostra riga un
certo numero di volte, con tempi di attesa crescente fra un tentativo ed il
che si incarica di trovare le corrispondenze fra indirizzo IP e indirizzo
hardware sulla scheda di rete. È evidente allora che nel nostro caso, essendo
client e server sulla stessa rete, è scaduta la voce nella \textit{ARP
- cache}\footnote{la \textit{ARP chache} è una tabella mantenuta internamente
+ cache}\footnote{la \textit{ARP cache} è una tabella mantenuta internamente
dal kernel che contiene tutte le corrispondenze fra indirizzi IP e indirizzi
fisici, ottenute appunto attraverso il protocollo ARP; le voci della tabella
hanno un tempo di vita limitato, passato il quale scadono e devono essere
di end-of-file (\texttt{\small 38--47}) si provvederà a chiudere
(\texttt{\small 39}) anche il nostro capo del socket e a marcarlo
(\texttt{\small 40}) nella struttura ad esso associata come inutilizzato.
-Infine dovrà essere ricalcolato (\texttt{\small 41--45}) un eventiale nuovo
+Infine dovrà essere ricalcolato (\texttt{\small 41--45}) un eventuale nuovo
valore di \var{max\_fd}. L'ultimo passo è (\texttt{\small 46}) chiudere il
ciclo in quanto in questo caso non c'è più niente da riscrivere all'indietro
sul socket.
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: socket TCP client dell'I multiplexing stream three way handshake
+% LocalWords: header stack kernel SYN ACK URG syncronize sez bind listen fig
+% LocalWords: accept connect active acknowledge l'acknowledge nell'header MSS
+% LocalWords: sequence number l'acknowledgement dell'header options l'header
+% LocalWords: option MMS segment size MAXSEG window advertized Mbit sec nell'
+% LocalWords: timestamp RFC long fat close of l'end l'ACK half shutdown CLOSED
+% LocalWords: netstat SENT ESTABLISHED WAIT IPv Ethernet piggybacking UDP MSL
+% LocalWords: l'overhead Stevens Lifetime router hop limit TTL to live RST SSH
+% LocalWords: routing dell'MSL l'IP multitasking well known port ephemeral BSD
+% LocalWords: ports dall' IANA Assigned Authority like glibc netinet IPPORT AF
+% LocalWords: RESERVED USERRESERVED rsh rlogin pair socketpair Local Address
+% LocalWords: Foreing DNS caching INADDR ANY multihoming loopback ssh fuser ip
+% LocalWords: lsof SOCK sys int sockfd const struct sockaddr serv addr socklen
+% LocalWords: addrlen errno EBADF descriptor EINVAL ENOTSOCK EACCES EADDRINUSE
+% LocalWords: EADDRNOTAVAIL EFAULT ENOTDIR ENOENT ENOMEM ELOOP ENOSR EROFS RPC
+% LocalWords: portmapper htonl tab endianess BROADCAST broadcast any extern fd
+% LocalWords: ADRR INIT DGRAM SEQPACKET servaddr ECONNREFUSED ETIMEDOUT EAGAIN
+% LocalWords: ENETUNREACH EINPROGRESS EALREADY EAFNOSUPPORT EPERM EISCONN proc
+% LocalWords: sysctl filesystem syn retries reset ICMP backlog EOPNOTSUPP RECV
+% LocalWords: connection queue dell'ACK flood spoofing syncookies SOMAXCONN CR
+% LocalWords: RDM EWOULDBLOCK firewall ENOBUFS EINTR EMFILE ECONNABORTED NULL
+% LocalWords: ESOCKTNOSUPPORT EPROTONOSUPPORT ERESTARTSYS connected listening
+% LocalWords: DECnet read write NONBLOCK fcntl getsockname getpeername name ps
+% LocalWords: namelen namlen ENOTCONN exec inetd POSIX daytime FullRead count
+% LocalWords: BUF FullWrite system call INET perror htons inet pton ctime FTP
+% LocalWords: fputs carriage return line feed superdemone daytimed sleep fork
+% LocalWords: daemon cunc logging list conn sock exit snprintf ntop ntohs echo
+% LocalWords: crash superserver L'RFC first ClientEcho stdin stdout fgets main
+% LocalWords: MAXLINE initd echod ServEcho setgid short nogroup nobody setuid
+% LocalWords: demonize PrintErr syslog wrapper log error root RTT EOF ctrl ack
+% LocalWords: while SIGCHLD Signal RESTART sigaction SignalRestart SigHand win
+% LocalWords: flags select recvfrom debug second compat waiting Nsec ENETDOWN
+% LocalWords: EPROTO ENOPROTOOPT EHOSTDOWN ENONET EHOSTUNREACH LINGER tcpdump
+% LocalWords: ECONNRESET advertising PSH SIGTERM strace SIGPIPE gets tcp ARP
+% LocalWords: cache anarres destination unreachable l'I low watermark RCVLOWAT
+% LocalWords: SNDLOWAT third fset maxfd fileno ISSET closed how SHUT RD WR eof
+% LocalWords: RDWR fifo Trip ping fourth CLR sull'I SETSIZE nread break Denial
+% LocalWords: Service poll POLLIN POLLRDNORM POLLPRI POLLRDBAND POLLOUT events
+% LocalWords: POLLHUP POLLERR revents pollfd
%% tcpprot.tex
%%
-%% Copyright (C) 2002-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2002-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: sez TCP fig netstat UDP