From deedb21b3760f8d108ee5c9d6df0bcbbb0d5037e Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Mon, 6 Dec 2010 14:35:30 +0000 Subject: [PATCH] Note su signalfd --- fileadv.tex | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/fileadv.tex b/fileadv.tex index 77e058e..76cf7b6 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -1884,9 +1884,13 @@ contemporanea sia l'arrivo del segnale che la disponibilit relativi a questi ultimi. La funzione che permette di abilitare la ricezione dei segnali tramite file -descriptor è \funcd{signalfd},\footnote{in realtà questa è il nome della - funzione fornita dalle \acr{glibc}, esistono in realtà due - versioni, anche se } il cui prototipo è: +descriptor è \funcd{signalfd},\footnote{in realtà quella riportata è la + interfacia alla funzione fornita dalle \acr{glibc}, esistono in realtà due + versioni diverse della \textit{system call}, la prima versione, + \func{signalfd}, introdotta nel kernel 2.6.22 e disponibile con le + \acr{glibc} 2.8 che non supporta l'argomento, ed una seconda versione, \func{signalfd4}, che prende + argomenti aggiuntivi, introdotta con il kernel 2.6.27 che è quella che viene + sempre usata a partire dalle \acr{glibc} 2.9.} il cui prototipo è: \begin{prototype}{sys/signalfd.h} {int signalfd(int fd, const sigset\_t *mask, int flags)} @@ -1911,29 +1915,30 @@ descriptor La funzione consente di creare o modificare le caratteristiche di un file descriptor speciale su cui ricevere le notifiche della ricezione di -segnali. Per creare un nuovo file descriptor è necessario passare $-1$ come -valore per l'argomento \param{fd}, ogni altro valore positivo verrà invece -interpretato come il numero del file descriptor (che deve esser stato +segnali. Per creare ex-novo uno di questi file descriptor è necessario passare +$-1$ come valore per l'argomento \param{fd}, ogni altro valore positivo verrà +invece interpretato come il numero del file descriptor (che deve esser stato precedentemente creato sempre con \func{signalfd}) di cui si vogliono -modificare le caratteristiche. Nel primo caso la funzione ritornerà il nuovo -file descriptor e nel secondo caso \param{fd}, in caso di errore verrà invece -restituito $-1$. +modificare le caratteristiche. Nel primo caso la funzione ritornerà il valore +del nuovo file descriptor e nel secondo caso il valore indicato +con \param{fd}, in caso di errore invece verrà restituito $-1$. L'elenco dei segnali che si vogliono gestire con \func{signalfd} deve essere specificato tramite l'argomento \param{mask}. Questo deve essere passato come -puntatore ad una maschera di segnali creata con l'uso delle apposite macro -illustrate in sez.~\ref{sec:sig_sigset} che indichi su quali segnali si -intende operare con \func{signalfd}, l'elenco può essere modificato da una -chiamata successiva. Dato che \const{SIGKILL} e \const{SIGSTOP} non possono -essere intercettati (e non prevedono neanche la possibilità di un gestore) un -loro inserimento nella maschera verrà semplicemente ignorato, senza generare -errori. - -Infine l'argomento \param{flags} consente di impostare direttamente in fase di +puntatore ad una maschera di segnali creata con l'uso delle apposite macro già +illustrate in sez.~\ref{sec:sig_sigset}; la maschera deve indicare su quali +segnali si intende operare con \func{signalfd}; l'elenco può essere modificato +con una successiva chiamata a \func{signalfd}. Dato che \const{SIGKILL} e +\const{SIGSTOP} non possono essere intercettati (e non prevedono neanche la +possibilità di un gestore) un loro inserimento nella maschera verrà ignorato, +senza generare errori. + +L'argomento \param{flags} consente di impostare direttamente in fase di creazione due flag per il file descriptor analoghe a quelle che si possono impostare con \func{open}, evitando una impostazione successiva con -\func{fcntl}.\footnote{questo è un argomento aggiuntivo introdotto con il - kernel 2.6.27, in precedenza il valore era nullo } +\func{fcntl}.\footnote{questo è un argomento aggiuntivo, introdotto con la + versione fornita a partire dal kernel 2.6.27, per kernel precedenti il + valore deve essere nullo.} \begin{table}[htb] \centering -- 2.30.2