From c49e97bdcba8e4da8578d5a048a5764a622aff1e Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 16 Apr 2006 19:33:05 +0000 Subject: [PATCH] Correzioni ortografiche generali, con creazione dei vocabolari locali --- fileadv.tex | 88 ++++++++++++++++++++++++++++++++++-------------- fileintro.tex | 17 +++++----- filestd.tex | 36 ++++++++++++++++---- fileunix.tex | 46 +++++++++++++++++++------- ipc.tex | 90 +++++++++++++++++++++++++++++++++++++++----------- netlayer.tex | 63 ++++++++++++++++++++++++----------- network.tex | 32 ++++++++++++++---- othersock.tex | 17 ++++++++-- preambolo.tex | 8 +++-- pref.tex | 4 ++- process.tex | 36 ++++++++++---------- session.tex | 83 ++++++++++++++++++++++++++++++++-------------- signal.tex | 6 ++-- sockadv.tex | 2 +- sockctrl.tex | 4 +-- socket.tex | 43 +++++++++++++++++++----- system.tex | 10 +++--- tcpsock.tex | 65 +++++++++++++++++++++++++++++------- trasplayer.tex | 4 ++- 19 files changed, 477 insertions(+), 177 deletions(-) diff --git a/fileadv.tex b/fileadv.tex index b49bcf8..904e81e 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -1,6 +1,6 @@ %% 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", @@ -270,7 +270,7 @@ immediatamente prima di eseguire l'attesa, e ripristinata al ritorno della 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 @@ -285,10 +285,10 @@ sotto controllo anche dei file descriptor con \func{select}, in questo caso si 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 @@ -309,6 +309,8 @@ in questo caso utilizzando \var{oldmask} durante l'esecuzione di \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}} @@ -435,6 +437,8 @@ indica un errore nella chiamata, il cui codice viene riportato al solito tramite \var{errno}. +% TODO accennare a ppoll + %\subsection{L'interfaccia di \textit{epoll}} %\label{sec:file_epoll} % placeholder ... @@ -1402,7 +1406,7 @@ tab.~\ref{tab:file_mmap_flag}. 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 @@ -2280,13 +2284,13 @@ questo caso la titolarit 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. @@ -2619,16 +2623,16 @@ significato, diventa l'indicazione della presenza o meno del \textit{mandatory 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). @@ -2690,3 +2694,39 @@ possibilit %%% 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 diff --git a/fileintro.tex b/fileintro.tex index 56b8ef7..129df40 100644 --- a/fileintro.tex +++ b/fileintro.tex @@ -264,14 +264,15 @@ utilizzando il tipo \ctyp{FILE *}. L'interfaccia \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 diff --git a/filestd.tex b/filestd.tex index f01266a..c6cf457 100644 --- a/filestd.tex +++ b/filestd.tex @@ -1,6 +1,6 @@ %% 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", @@ -753,10 +753,10 @@ processo adiacente al buffer.\footnote{questa tecnica 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 @@ -1417,7 +1417,7 @@ Dato che la procedura di allocazione manuale (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. @@ -1614,3 +1614,27 @@ che pu %%% 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 diff --git a/fileunix.tex b/fileunix.tex index 8af781c..1bae4dd 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -296,7 +296,7 @@ descriptor con il valore pi \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 @@ -455,9 +455,9 @@ descriptor ritorna disponibile; il suo prototipo 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. @@ -651,7 +651,7 @@ posizione \param{offset}, nel buffer \param{buf}. 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. @@ -839,7 +839,7 @@ problema, quando si andr 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 @@ -1051,8 +1051,8 @@ descriptor, che non riguardano la normale lettura e scrittura di dati, ma la 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}, @@ -1217,7 +1217,7 @@ accesso dal \textit{file status flag}. \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 @@ -1241,9 +1241,9 @@ file descriptor. Il prototipo di questa funzione 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} @@ -1309,3 +1309,25 @@ relativi ad operazioni comunque eseguibili anche attraverso \func{fcntl}. %%% 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 diff --git a/ipc.tex b/ipc.tex index 3baa2b8..452962b 100644 --- a/ipc.tex +++ b/ipc.tex @@ -1,6 +1,6 @@ %% 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", @@ -1639,7 +1639,7 @@ passo (\texttt{\small 17}) prima di uscire 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} @@ -2506,14 +2506,14 @@ corrispondente comportamento della funzione, sono i seguenti: \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 @@ -2707,7 +2707,7 @@ chiave ed il puntatore associati al segmento di memoria condivisa, prima lo 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. @@ -2770,7 +2770,7 @@ Il programma, dopo la sezione, omessa, relativa alla gestione delle opzioni da 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. @@ -3037,13 +3037,13 @@ caratteristica della funzione \func{open} (illustrata in 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} @@ -3485,7 +3485,7 @@ Rimuove una coda di messaggi. 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. @@ -3833,10 +3833,10 @@ La funzione apre un segmento di memoria condivisa identificato dal nome \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 @@ -3953,7 +3953,7 @@ cancellare un segmento di memoria condivisa. Dato che al contrario di quanto 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. @@ -3961,3 +3961,53 @@ retituendo 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