\end{figure}
Della funzione di sistema esiste una seconda versione, \funcd{pipe2},
-introdotta con il kernel 2.6.27 e le \acr{glibc} 2.9 e specifica di Linux
+introdotta con il kernel 2.6.27 e la \acr{glibc} 2.9 e specifica di Linux
(utilizzabile solo definendo la macro \macro{\_GNU\_SOURCE}), che consente di
impostare atomicamente le caratteristiche dei file descriptor restituiti, il
suo prototipo è:
\cmd{gs}, il primo infatti è in grado di generare immagini PostScript di
codici a barre corrispondenti ad una qualunque stringa, mentre il secondo
serve per poter effettuare la conversione della stessa immagine in formato
-JPEG. Usando una \textit{pipe} potremo inviare l'output del primo sull'input del
-secondo, secondo lo schema mostrato in fig.~\ref{fig:ipc_pipe_use}, in cui la
-direzione del flusso dei dati è data dalle frecce continue.
+JPEG. Usando una \textit{pipe} potremo inviare l'output del primo sull'input
+del secondo, secondo lo schema mostrato in fig.~\ref{fig:ipc_pipe_use}, in cui
+la direzione del flusso dei dati è data dalle frecce continue.
Si potrebbe obiettare che sarebbe molto più semplice salvare il risultato
intermedio su un file temporaneo. Questo però non tiene conto del fatto che un
\textit{pipe} creata, che sarà aperto in sola lettura (e quindi associato allo
\textit{standard output} del programma indicato) in caso si sia indicato
\code{r}, o in sola scrittura (e quindi associato allo \textit{standard
- input}) in caso di \code{w}. A partire dalla versione 2.9 delle \acr{glibc}
+ input}) in caso di \code{w}. A partire dalla versione 2.9 della \acr{glibc}
(questa è una estensione specifica di Linux) all'argomento \param{type} può
essere aggiunta la lettera ``\texttt{e}'' per impostare automaticamente il
flag di \textit{close-on-exec} sul file descriptor sottostante (si ricordi
% primo e ultimo messaggio sono inizializzati a \val{NULL} e
% \var{msg\_cbytes}, che esprime la dimensione in byte dei messaggi presenti è
% inizializzato a zero. Questi campi sono ad uso interno dell'implementazione
-% e non devono essere utilizzati da programmi in user space).
+% e non devono essere utilizzati da programmi in \textit{user space}).
\end{itemize*}
Una volta creata una coda di messaggi le operazioni di controllo vengono
\struct{semun}, la cui definizione, con i possibili valori che può assumere, è
riportata in fig.~\ref{fig:ipc_semun}.
-Nelle versioni più vecchie delle \acr{glibc} questa unione veniva definita in
+Nelle versioni più vecchie della \acr{glibc} questa unione veniva definita in
\file{sys/sem.h}, ma nelle versioni più recenti questo non avviene più in
quanto lo standard POSIX.1-2001 richiede che sia sempre definita a cura del
-chiamante. In questa seconda evenienza le \acr{glibc} definiscono però la
+chiamante. In questa seconda evenienza la \acr{glibc} definisce però la
macro \macrod{\_SEM\_SEMUN\_UNDEFINED} che può essere usata per controllare la
situazione.
\param{semnum} dell'insieme \param{semid} (corrispondente al campo
\var{sempid} di \struct{sem}). Va invocata con tre argomenti. Occorre avere
il permesso di lettura.
-\item[\constd{GETVAL}] Restituisce come valore di ritorno della funzione il il
+\item[\constd{GETVAL}] Restituisce come valore di ritorno della funzione il
valore corrente del semaforo \param{semnum} dell'insieme \param{semid}
(corrispondente al campo \var{semval} di \struct{sem}). Va invocata con tre
argomenti. Occorre avere il permesso di lettura.
Con lo standard POSIX.1-2001 è stata introdotta una variante di \func{semop}
che consente di specificare anche un tempo massimo di attesa. La nuova
-funzione di sistema, disponibile a partire dal kernel 2.4.22 e dalle
+funzione di sistema, disponibile a partire dal kernel 2.4.22 e dalla
\acr{glibc} 2.3.3, ed utilizzabile solo dopo aver definito la macro
\macro{\_GNU\_SOURCE}, è \funcd{semtimedop}, ed il suo prototipo è:
Il campo \var{sem\_flg} è un flag, mantenuto come maschera binaria, per il
quale possono essere impostati i due valori \const{IPC\_NOWAIT} e
-\constd{SEM\_UNDO}. Impostando \const{IPC\_NOWAIT} si fa si che in tutti quei
+\constd{SEM\_UNDO}. Impostando \const{IPC\_NOWAIT} si fa sì che in tutti quei
casi in cui l'esecuzione di una operazione richiederebbe di porre il processo
vada nello stato di \textit{sleep}, invece di bloccarsi \func{semop} ritorni
immediatamente (abortendo così le eventuali operazioni restanti) con un errore
salvata su disco dal meccanismo della memoria virtuale. Come illustrato in
sez.~\ref{sec:proc_mem_lock} fino al kernel 2.6.9 solo l'amministratore
poteva utilizzare questa capacità,\footnote{che richiedeva la
- \textit{capability} \const{CAP\_IPC\_LOCK}.} a partire dal dal kernel
- 2.6.10 anche gli utenti normali possono farlo fino al limite massimo
- determinato da \const{RLIMIT\_MEMLOCK} (vedi
- sez.~\ref{sec:sys_resource_limit}).
+ \textit{capability} \const{CAP\_IPC\_LOCK}.} a partire dal kernel 2.6.10
+ anche gli utenti normali possono farlo fino al limite massimo determinato da
+ \const{RLIMIT\_MEMLOCK} (vedi sez.~\ref{sec:sys_resource_limit}).
\item[\constd{SHM\_UNLOCK}] Disabilita il \textit{memory locking} sul segmento
di memoria condivisa. Fino al kernel 2.6.9 solo l'amministratore poteva
utilizzare questo comando in corrispondenza di un segmento da lui bloccato.
L'argomento \param{shmaddr} specifica a quale indirizzo\footnote{lo standard
SVID prevede che l'argomento \param{shmaddr} sia di tipo \ctyp{char *}, così
- come il valore di ritorno della funzione; in Linux è stato così con le
- \acr{libc4} e le \acr{libc5}, con il passaggio alla \acr{glibc} il tipo di
+ come il valore di ritorno della funzione; in Linux è stato così con la
+ \acr{libc4} e la \acr{libc5}, con il passaggio alla \acr{glibc} il tipo di
\param{shmaddr} è divenuto un \ctyp{const void *} e quello del valore di
ritorno un \ctyp{void *} seguendo POSIX.1-2001.} deve essere associato il
segmento, se il valore specificato è \val{NULL} è il sistema a scegliere
L'argomento \param{shmflg} permette di cambiare il comportamento della
funzione; esso va specificato come maschera binaria, i bit utilizzati al
-momento sono sono tre e sono identificati dalle costanti \const{SHM\_RND},
+momento sono tre e sono identificati dalle costanti \const{SHM\_RND},
\const{SHM\_RDONLY} e \const{SHM\_REMAP} che vanno combinate con un OR
-aritmetico.
+aritmetico.
Specificando \constd{SHM\_RND} si evita che \func{shmat} ritorni un errore
quando \param{shmaddr} non è allineato ai confini di una pagina. Si può quindi
La funzione è analoga a \func{close},\footnote{su Linux, dove le code sono
implementate come file su un filesystem dedicato, è esattamente la stessa
funzione, per cui non esiste una \textit{system call} autonoma e la funzione
- viene rimappata su \func{close} dalle \acr{glibc}.} dopo la sua esecuzione
+ viene rimappata su \func{close} dalla \acr{glibc}.} dopo la sua esecuzione
il processo non sarà più in grado di usare il descrittore della coda, ma
quest'ultima continuerà ad esistere nel sistema e potrà essere acceduta con
un'altra chiamata a \func{mq\_open}. All'uscita di un processo tutte le code
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 della \acr{glibc} che usano questa
-nuova infrastruttura per quella che viene che viene chiamata \textit{New Posix
- Thread Library}, sono state implementate anche tutte le funzioni
-dell'interfaccia dei semafori POSIX.
+nuova infrastruttura per 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