From dad0cc5452eb3ce3a9c6bbe12588591c39d962c5 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Mon, 14 Feb 2011 12:01:07 +0000 Subject: [PATCH] Piccole aggiunte e correzioni --- fileadv.tex | 36 ++++++++++++++++++++++++++++++++---- signal.tex | 12 ++++++------ sources/FifoReporter.c | 4 ++-- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/fileadv.tex b/fileadv.tex index 156de8e..37a6e7f 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -2100,21 +2100,49 @@ restituisce dati simili. Come per \struct{siginfo\_t} i campi che vengono avvalorati dipendono dal tipo di segnale e ricalcano i valori che abbiamo già illustrato in sez.~\ref{sec:sig_sigaction}.\footnote{si tenga presente però che per un bug i kernel fino al 2.6.25 non avvalorano correttamente i campi - \var{ssi\_ptr} e \var{ssi_int} per segnali inviati con \func{sigqueue}.} + \var{ssi\_ptr} e \var{ssi\_int} per segnali inviati con \func{sigqueue}.} Lo stesso paradigma di notifica tramite file descriptor usato per i segnali è stato adottato anche per i timer; in questo caso, rispetto a quanto visto in sez.~\ref{sec:sig_timer_adv}, la scadenza di un timer potrà essere letta da un -file descriptor, senza dover ricorrere ad altri meccanismi come un segnale o -un \textit{thread} di notifica. Di nuovo questo ha il vantaggio di poter +file descriptor, senza dover ricorrere ad altri meccanismi di notifica come un +segnale o un \textit{thread}. Di nuovo questo ha il vantaggio di poter utilizzare le funzioni dell'\textit{I/O multiplexing} per attendere allo stesso tempo la disponibilità di dati o la ricezione di un segnale qualunque.\footnote{in realtà per questo sarebbe già sufficiente \func{signalfd} per ricevere i segnali associati ai timer, ma la nuova interfaccia semplifica notevolmente la gestione.} -Le funzioni di questa interfaccia riprendono da vicino +Le funzioni di questa interfaccia riprendono da vicino quelle introdotte da +POSIX.1-2001 illustrate sez.~\ref{sec:sig_timer_adv}. La prima funzione, che +consente di creare un \textit{timer} è \funcd{timerfd\_create}, il cui +prototipo è: +\begin{prototype}{sys/timerfd.h} + {int timerfd\_create(int clockid, int flags)} + + Crea un timer associato ad un file descriptor per la notifica. + + \bodydesc{La funzione restituisce un numero di file descriptor in caso di + successo o $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno + dei valori: + \begin{errlist} + \item[\errcode{EINVAL}] l'argomento \param{clockid} non è + \const{CLOCK\_MONOTONIC} o \const{CLOCK\_REALTIME}, o + l'argomento \param{flag} non è valido o diverso da zero per kernel + precedenti il 2.6.27. + \item[\errcode{ENOMEM}] non c'è memoria sufficiente per creare un nuovo file + descriptor di \func{signalfd}. + \item[\errcode{ENODEV}] il kernel non può montare internamente il + dispositivo per la gestione anonima degli inode associati al file + descriptor. + \end{errlist} + ed inoltre \errval{EMFILE} e \errval{ENFILE}. +} +\end{prototype} +La funzione prende come primo argomento il tipo di orologio a cui il timer +deve fare riferimento, ed i soli valori validi sono \const{CLOCK\_REALTIME}, +per indicare % TODO trattare qui eventfd, timerfd introdotte con il 2.6.22 diff --git a/signal.tex b/signal.tex index 4400436..06c2934 100644 --- a/signal.tex +++ b/signal.tex @@ -2617,12 +2617,12 @@ hardware che possono supportare risoluzioni molto elevate, ed in maniera del tutto indipendente dalla frequenza scelta per il timer di sistema che governa lo \textit{scheduler};\footnote{normalmente si possono ottenere precisioni fino al microsecondo, andando molto oltre in caso di hardware dedicato.} per -questo lo standard POSIX ha previsto una serie di nuove funzioni relative a -quelli che vengono chiamati ``\textsl{orologi} \textit{real-time}'', in grado -di supportare risoluzioni fino al nanosecondo. Inoltre le CPU più moderne sono -dotate a loro volta di contatori ad alta definizione che consentono una grande -accuratezza nella misura del tempo da esse dedicato all'esecuzione di un -processo. +questo lo standard POSIX.1-2001 ha previsto una serie di nuove funzioni +relative a quelli che vengono chiamati ``\textsl{orologi} +\textit{real-time}'', in grado di supportare risoluzioni fino al +nanosecondo. Inoltre le CPU più moderne sono dotate a loro volta di contatori +ad alta definizione che consentono una grande accuratezza nella misura del +tempo da esse dedicato all'esecuzione di un processo. Per usare queste funzionalità ed ottenere risoluzioni temporali più accurate, occorre però un opportuno supporto da parte del kernel, ed i cosiddetti diff --git a/sources/FifoReporter.c b/sources/FifoReporter.c index 49b328a..eecdb12 100644 --- a/sources/FifoReporter.c +++ b/sources/FifoReporter.c @@ -157,7 +157,7 @@ int main(int argc, char *argv[]) die("Cannot create well known fifo"); } if ((fifofd = open(fifoname, O_RDWR|O_NONBLOCK)) < 0) // open fifo - die("Cannot open read only well known fifo"); + die("Cannot open well known fifo"); epev.data.fd = fifofd; // add fd to epoll epev.events = EPOLLIN; if (epoll_ctl(epfd, EPOLL_CTL_ADD, fifofd, &epev)) @@ -204,7 +204,7 @@ int main(int argc, char *argv[]) } buffer[nread] = 0; if (fputs(buffer, stdout) == EOF) - die("Errore in scrittura su terminale"); + die("Error on terminal write"); } } else { // anything else is an error printf("epoll activity on unknown %i file descriptor\n", -- 2.30.2