X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=ipc.tex;h=452962b500a1916dc1a39aacc2a37fe314206a68;hb=c49e97bdcba8e4da8578d5a048a5764a622aff1e;hp=3baa2b83eae6a31528f59df05163fead6ff22d18;hpb=22e01eeebd2d386a8a992cba0fdaf2d73f5ff217;p=gapil.git 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