X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=ipc.tex;h=135bed7e51593ef210559a8fc124e678a8607170;hp=839f9dafa468a7eca5f9a5dce6bb805fa237d526;hb=6f8e0ca42d3d0b97b5e5747798a1eaffb44e8521;hpb=fa6f00d7ff97c2b7e88a40885be73ae54824f139 diff --git a/ipc.tex b/ipc.tex index 839f9da..135bed7 100644 --- a/ipc.tex +++ b/ipc.tex @@ -131,7 +131,7 @@ da altri processi. Per capire meglio il funzionamento delle pipe faremo un esempio di quello che è il loro uso più comune, analogo a quello effettuato della shell, e che consiste nell'inviare l'output di un processo (lo standard output) sull'input -di un'altro. Realizzeremo il programma di esempio nella forma di un +di un altro. Realizzeremo il programma di esempio nella forma di un \textit{CGI}\footnote{Un CGI (\textit{Common Gateway Interface}) è un programma che permette la creazione dinamica di un oggetto da inserire all'interno di una pagina HTML.} per Apache, che genera una immagine JPEG @@ -3046,7 +3046,7 @@ 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} -(sono contenute in \file{LockFile.c}, un'altro dei sorgenti allegati alla +(sono contenute in \file{LockFile.c}, un altro dei sorgenti allegati alla guida) che permettono rispettivamente di creare e rimuovere un \textsl{file di lock}. Come si può notare entrambe le funzioni sono elementari; la prima (\texttt{\small 4--10}) si limita ad aprire il file di lock (\texttt{\small @@ -3073,7 +3073,7 @@ caso si pu esistente; se il link esiste già e la funzione fallisce, significa che la risorsa è bloccata e potrà essere sbloccata solo con un \func{unlink}, altrimenti il link è creato ed il lock acquisito; il controllo e l'eventuale -acquisizione sono atomici; la soluzione funziona anche su NFS, ma ha un'altro +acquisizione sono atomici; la soluzione funziona anche su NFS, ma ha un altro difetto è che è quello di poterla usare solo se si opera all'interno di uno stesso filesystem. @@ -3155,7 +3155,7 @@ write lock sul file, che poi (\texttt{\small 21}) viene richiesto con \func{fcntl}, restituendo il valore di ritorno di quest'ultima. Se il file è libero il lock viene acquisito e la funzione ritorna immediatamente; altrimenti \func{fcntl} si bloccherà (si noti che la si è chiamata con -\func{F\_SETLKW}) fino al rilascio del lock. +\const{F\_SETLKW}) fino al rilascio del lock. La quarta funzione (\texttt{\small 24--34}) è \func{UnlockMutex} e serve a rilasciare il mutex. La funzione è analoga alla precedente, solo che in questo @@ -3255,9 +3255,9 @@ tuttavia dei patch e una libreria aggiuntiva. La caratteristica fondamentale dell'interfaccia POSIX è l'abbandono dell'uso degli identificatori e delle chiavi visti nel SysV IPC, per passare ai -\textit{Posix IPC names}\itindex{Posix~IPC~names}, che sono sostanzialmente +\textit{POSIX IPC names}\itindex{POSIX~IPC~names}, che sono sostanzialmente equivalenti ai nomi dei file. Tutte le funzioni che creano un oggetto di IPC -Posix prendono come primo argomento una stringa che indica uno di questi nomi; +POSIX prendono come primo argomento una stringa che indica uno di questi nomi; lo standard è molto generico riguardo l'implementazione, ed i nomi stessi possono avere o meno una corrispondenza sul filesystem; tutto quello che è richiesto è che: @@ -3646,6 +3646,9 @@ differenza di quanto avveniva con le code di messaggi di SysV che permettono invece la selezione in base al valore del campo \var{mtype}. Qualora non interessi usare la priorità dei messaggi si +% TODO vericare questa interruzione di paragrafo +% TODO inserire i dati di /proc/sys/fs/mqueue + Qualora la coda sia vuota entrambe le funzioni si bloccano, a meno che non si sia selezionata la modalità non bloccante; in tal caso entrambe ritornano immediatamente con l'errore \errcode{EAGAIN}. Anche in questo caso la sola @@ -3771,6 +3774,7 @@ pi POSIX. L'interfaccia corrente è stata stabilizzata a partire dal kernel 2.5.40. +% TODO vedere se ci sono novità e trattare la cosa. @@ -3862,10 +3866,10 @@ segmento di memoria condiviso con le stesse modalit effetto.} viste in sez.~\ref{sec:file_open}; in particolare viene impostato il flag \const{FD\_CLOEXEC}. Chiamate effettuate da diversi processi usando lo stesso nome, restituiranno file descriptor associati allo stesso segmento -(così come, nel caso di file di dati, essi sono associati allo stesso inode). -In questo modo è possibile effettuare una chiamata ad \func{mmap} sul file -descriptor restituito da \func{shm\_open} ed i processi vedranno lo stesso -segmento di memoria condivisa. +(così come, nel caso di file di dati, essi sono associati allo stesso +\index{inode}inode). In questo modo è possibile effettuare una chiamata ad +\func{mmap} sul file descriptor restituito da \func{shm\_open} ed i processi +vedranno lo stesso segmento di memoria condivisa. Quando il nome non esiste il segmento può essere creato specificando \const{O\_CREAT}; in tal caso il segmento avrà (così come i nuovi file)