Qualora la coda sia piena, entrambe le funzioni si bloccano, a meno che non
sia stata selezionata in fase di apertura la modalità non
-bloccante,\footnote{o si sia impostato il flag \const{O\_NONBLOCK} sul fie
+bloccante,\footnote{o si sia impostato il flag \const{O\_NONBLOCK} sul file
descriptor della coda.} nel qual caso entrambe ritornano \errcode{EAGAIN}.
La sola differenza fra le due funzioni è che la seconda, passato il tempo
massimo impostato con l'argomento \param{abs\_timeout},\footnote{deve essere
ritorno.\footnote{si tenga presente che 0 è una dimensione valida la
condizione di errore è restituita dal valore -1; Stevens in \cite{UNP2} fa
notare che questo è uno dei casi in cui vale ciò che lo standard
- \textsl{non} dice, una dimenzione nulla infatti, pur non essendo citata, non
+ \textsl{non} dice, una dimensione nulla infatti, pur non essendo citata, non
viene proibita.}
Se la dimensione specificata da \param{msg\_len} non è sufficiente a contenere
\subsection{Semafori}
\label{sec:ipc_posix_sem}
-Dei semafori POSIX esistono sostanzialmente due implementazioni; una è fatta a
-livello di libreria ed è fornita dalla libreria dei thread; questa però li
-implementa solo a livello di thread e non di processi.\footnote{questo
- significa che i semafori sono visibili solo all'interno dei thread creati da
- un singolo processo, e non possono essere usati come meccanismo di
- sincronizzazione fra processi diversi.} Esiste però anche una libreria
-realizzata da Konstantin Knizhnik, che reimplementa l'interfaccia POSIX usando
-i semafori di SysV IPC, e che non vale comunque la pena di usare visto che i
-problemi sottolineati in sez.~\ref{sec:ipc_sysv_sem} rimangono, anche se
-mascherati.
-
-In realtà a partire dal kernel 2.5.7 è stato introdotto un meccanismo di
+Fino alla serie 2.4.x del kernel esistevano due implementazioni dei semafori
+POSIX; una parziale che li realizzava solo a livello di thread e non di
+processi,\footnote{questo significava che i semafori erano visibili solo
+ all'interno dei thread creati da un singolo processo, e non potevano essere
+ usati come meccanismo di sincronizzazione fra processi diversi.} presente
+nella sezione delle estensioni \textit{real-time} delle
+\acr{glibc},\footnote{quelle che si accedono collegandosi alla libreria
+ \texttt{librt}.} ed una che realizzava l'interfaccia POSIX usando le
+funzioni dei semafori di SysV IPC (mantenendo così tutti i problemi
+sottolineati in sez.~\ref{sec:ipc_sysv_sem}).
+
+A partire dal kernel 2.5.7 è stato introdotto un meccanismo di
sincronizzazione completamente nuovo, basato sui cosiddetti
-\textit{futex}\footnote{la sigla sta per \textit{fast user mode mutex}.}, con
-il quale è stato possibile implementare una versione nativa dei semafori; esso
-è già stato usato con successo per reimplementare in maniera più efficiente
-tutte le direttive di sincronizzazione previste per i thread POSIX; e con il
-kernel della serie 2.6 e le nuove versioni delle \acr{glibc} che usano quella
-che viene chiamata la \textit{New Posix Thread Library} sono state
-implementate tutte le funzioni occorrenti.
-
-Anche in questo caso (come per le code di messaggi) è necessario appoggiarsi
-alla libreria per le estensioni \textit{real-time} \texttt{librt}, questo
-significa che se si vuole utilizzare questa interfaccia, oltre ad utilizzare
-gli opportuni file di definizione, occorrerà compilare i programmi con
-l'opzione \texttt{-lrt}.
+\textit{futex},\footnote{la sigla sta per \textit{fast user mode mutex}.} con
+il quale è stato possibile implementare una versione nativa dei semafori
+POSIX. Grazie a questo con i kernel della serie 2.6 e le nuove versioni delle
+\acr{glibc} che usano questa nuova infrastruttura per quella che viene quella
+che viene chiamata \textit{New Posix Thread Library}, sono state implementate
+anche tutte le funzioni dell'interfaccia dei semafori POSIX.
+
+Anche in questo caso è necessario appoggiarsi alla libreria per le estensioni
+\textit{real-time} \texttt{librt}, questo significa che se si vuole utilizzare
+questa interfaccia, oltre ad utilizzare gli opportuni file di definizione,
+occorrerà compilare i programmi con l'opzione \texttt{-lrt}.
% TODO trattare l'argomento a partire da man sem_overview.
% 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
+% LocalWords: FortuneServer FortuneParse FortuneClient pid libgapil LD librt
% 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: 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: poll polling queue MQFortuneServer write init HandSIGTERM l'IPC
% 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: 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 LIBRARY
+% LocalWords: CreateShm RemoveShm LIBRARY Library
%%% Local Variables: