X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=578f867f0d011bd03e4fce75c534232245314ea6;hp=56b24be494b38014af2817cacdffab6bf17b3dcf;hb=52958c279452903b8c4edea25643096a32c67235;hpb=1e09a8256d97540694702ac3952f36281542bc60 diff --git a/fileadv.tex b/fileadv.tex index 56b24be..578f867 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -373,8 +373,6 @@ invier in eccesso, e si dovrà determinare al solito modo quali sono i file diventati attivi. - - Benché la modalità di apertura asincrona di un file possa risultare utile in varie occasioni (in particolar modo con i socket e gli altri file per i quali le funzioni di I/O sono system call lente), essa è comunque limitata alla @@ -437,19 +435,76 @@ sul file da cui i dati saranno letti o scritti. Nel campo \var{aio\_buf} poi andrà specificato l'indirizzo del buffer usato per l'I/O, ed in \var{aio\_nbytes} la lunghezza del trasferimento. -Dato che l'I/O asincrono può supportare +Il campo \var{aio\_reqprio} permette di settare la priorità delle operazioni +di I/O.\footnote{in generale perché ciò sia possibile occorre che la + piattaforma supporti questa caratteristica, questo viene indicato definendo + le macro \macro{\_POSIX\_PRIORITIZED\_IO}, e + \macro{\_POSIX\_PRIORITY\_SCHEDULING}.} La priorità viene settata a partire +da quella del processo chiamante (vedi \secref{sec:proc_priority}), cui viene +sottratto il valore di questo campo. +Il campo \var{aio\_lio\_opcode} è usato dalla funzione \func{lio\_listio}, che +permette di attivare far partire una serie di operazioni in contemporanea su +una lista di file. Tramite questo campo si specifica quale è la natura di +ciascuna di esse. + +\begin{figure}[!htb] + \footnotesize \centering + \begin{minipage}[c]{15cm} + \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{} +struct sigevent +{ + sigval_t sigev_value; + int sigev_signo; + int sigev_notify; + sigev_notify_function; + sigev_notify_attributes; +}; + \end{lstlisting} + \end{minipage} + \normalsize + \caption{La struttura \type{sigevent}, usata per .} + \label{fig:file_sigevent} +\end{figure} + +Infine il campo \var{aio\_sigevent} serve a specificare il modo in cui si +vuole che la notifica del completamento delle operazioni richieste venga +effettuata. La struttura è riportata in \secref{fig:file_sigevent}; il campo +\var{sigev\_notify} è quello che indica le modalità della notifica, esso può +assumere i tre valori: +\begin{basedescript}{\desclabelwidth{3.0cm}} +\item[\macro{SIGEV\_NONE}] Non viene inviata nessuna notifica. +\item[\macro{SIGEV\_SIGNAL}] La notifica viene effettuata usando il segnale + specificato nel campo \var{sigev\_signo}. +\item[\macro{SIGEV\_THREAD}] La notifica viene effettuata creando un nuovo + thread che esegue la funzione specificata da \var{sigev\_notify\_function}, + con gli attributi specificati da \var{sigev\_notify\_attribute}. +\end{basedescript} Le due funzioni principali dell'interfaccia sono quelle per la lettura e scrittura, \func{aio\_read} e \func{aio\_write}, i cui prototipi sono: \begin{functions} \headdecl{aio.h} + \funcdecl{int aio\_read(struct aiocb *aiocbp)} Richiede una lettura asincrona sul file specificato tramite \param{aiocbp}. \funcdecl{int aio\_write(struct aiocb *aiocbp)} - Richiede una scrittura asincrona sul file specificato tramite \param{aiocbp}. + Richiede una scrittura asincrona sul file specificato tramite + \param{aiocbp}. + + \bodydesc{Le funzioni restituiscono 0 in caso di successo, e -1 in caso di + errore, nel qual caso \var{errno} viene settata ai valori: + \begin{errlist} + \item[\macro{EBADF}] Si è specificato un file descriptor sbagliato in uno + degli insiemi. + \item[\macro{ENOSYS}] La funzione è implementata. + \item[\macro{EINVAL}] Si è specificato un valore negativo non valido per i + campi \var{aio\_offset} o \var{aio\_reqprio}, di \param{aiocbp}. + \end{errlist} + ed inoltre \macro{ENOMEM}.} + \end{functions}