X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=647822a1fb9385156a2e17e297ff6748e408944b;hp=38f01fcf3d77be4a850bf90f374e33c2d29a1a67;hb=4e1da5b259a86278710be32441de7b88b9287ec1;hpb=583032fbff658a947c477c6fd25f87c13d884e85 diff --git a/fileadv.tex b/fileadv.tex index 38f01fc..647822a 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -8,6 +8,7 @@ %% license is included in the section entitled "GNU Free Documentation %% License". %% + \chapter{La gestione avanzata dei file} \label{cha:file_advanced} In questo capitolo affronteremo le tematiche relative alla gestione avanzata @@ -189,11 +190,12 @@ riportate in tab.~\ref{tab:file_flock_operation}. \end{table} I primi due valori, \const{LOCK\_SH} e \const{LOCK\_EX} permettono di -richiedere un \textit{file lock}, ed ovviamente devono essere usati in maniera -alternativa. Se si specifica anche \const{LOCK\_NB} la funzione non si -bloccherà qualora il \textit{file lock} non possa essere acquisito, ma -ritornerà subito con un errore di \errcode{EWOULDBLOCK}. Per rilasciare un -\textit{file lock} si dovrà invece usare \const{LOCK\_UN}. +richiedere un \textit{file lock} rispettivamente condiviso o esclusivo, ed +ovviamente non possono essere usati insieme. Se con essi si specifica anche +\const{LOCK\_NB} la funzione non si bloccherà qualora il \textit{file lock} +non possa essere acquisito, ma ritornerà subito con un errore di +\errcode{EWOULDBLOCK}. Per rilasciare un \textit{file lock} si dovrà invece +usare direttamente const{LOCK\_UN}. Si tenga presente che non esiste una modalità per eseguire atomicamente un cambiamento del tipo di blocco (da \textit{shared lock} a \textit{esclusive @@ -232,7 +234,7 @@ inode\index{inode},\footnote{in particolare, come accennato in dato che questo è l'unico riferimento in comune che possono avere due processi diversi che aprono lo stesso file. -\begin{figure}[htb] +\begin{figure}[!htb] \centering \includegraphics[width=15.5cm]{img/file_flock} \caption{Schema dell'architettura del \textit{file locking}, nel caso @@ -331,9 +333,9 @@ che un \textit{file lock} fa sempre riferimento ad una regione, per cui si potrà avere un conflitto anche se c'è soltanto una sovrapposizione parziale con un'altra regione bloccata. -\begin{figure}[!bht] +\begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\textwidth} \includestruct{listati/flock.h} \end{minipage} \normalsize @@ -431,7 +433,7 @@ chiamate) per cui si deve sempre verificare il codice di ritorno di quando la si invoca con \const{F\_SETLK}, per controllare che il blocco sia stato effettivamente acquisito. -\begin{figure}[htb] +\begin{figure}[!htb] \centering \includegraphics[width=9cm]{img/file_lock_dead} \caption{Schema di una situazione di \itindex{deadlock} \textit{deadlock}.} \label{fig:file_flock_dead} @@ -469,8 +471,8 @@ questo caso la titolarità non viene identificata con il riferimento ad una voce nella \itindex{file~table} \textit{file table}, ma con il valore del \acr{pid} del processo. -\begin{figure}[!bht] - \centering \includegraphics[width=13cm]{img/file_posix_lock} +\begin{figure}[!htb] + \centering \includegraphics[width=12cm]{img/file_posix_lock} \caption{Schema dell'architettura del \textit{file locking}, nel caso particolare del suo utilizzo secondo l'interfaccia standard POSIX.} \label{fig:file_posix_lock} @@ -533,9 +535,9 @@ preoccuparsi di accorpare o dividere le voci nella lista dei \textit{file lock} per far si che le regioni bloccate da essa risultanti siano coerenti con quanto necessario a soddisfare l'operazione richiesta. -\begin{figure}[!htb] +\begin{figure}[!htbp] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\codesamplewidth} \includecodesample{listati/Flock.c} \end{minipage} \normalsize @@ -1262,7 +1264,7 @@ strutture \struct{pollfd} a meno di non voler cambiare qualche condizione. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\textwidth} \includestruct{listati/pollfd.h} \end{minipage} \normalsize @@ -1623,13 +1625,13 @@ indicare quale tipo di evento relativo ad \param{fd} si vuole che sia tenuto sotto controllo. L'argomento viene ignorato con l'operazione \const{EPOLL\_CTL\_DEL}.\footnote{fino al kernel 2.6.9 era comunque richiesto che questo fosse un puntatore valido, anche se poi veniva ignorato; a - partire dal 2.6.9 si può specificare anche un valore \texttt{NULL} ma se si + partire dal 2.6.9 si può specificare anche un valore \val{NULL} ma se si vuole mantenere la compatibilità con le versioni precedenti occorre usare un puntatore valido.} \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\textwidth} \includestruct{listati/epoll_event.h} \end{minipage} \normalsize @@ -2074,7 +2076,7 @@ successivo con \func{fcntl}. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\textwidth} \includestruct{listati/signalfd_siginfo.h} \end{minipage} \normalsize @@ -2117,9 +2119,9 @@ necessarie. Al solito si è tralasciata la parte dedicata alla decodifica delle opzioni che consentono ad esempio di cambiare il nome del file associato alla fifo. -\begin{figure}[!htb] +\begin{figure}[!htbp] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\codesamplewidth} \includecodesample{listati/FifoReporter-init.c} \end{minipage} \normalsize @@ -2148,9 +2150,9 @@ volta fatto questo sarà necessario aggiungere il relativo file descriptor del tutto analoga a quanto fatto con quello relativo alla notifica dei segnali. -\begin{figure}[!htb] +\begin{figure}[!htbp] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\codesamplewidth} \includecodesample{listati/FifoReporter-main.c} \end{minipage} \normalsize @@ -3086,7 +3088,7 @@ modalità non bloccante) fino all'arrivo di almeno un evento. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\textwidth} \includestruct{listati/inotify_event.h} \end{minipage} \normalsize @@ -3183,7 +3185,7 @@ funzioni di ausilio è riportato in fig.~\ref{fig:inotify_monitor_example}. \begin{figure}[!htbp] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\codesamplewidth} \includecodesample{listati/inotify_monitor.c} \end{minipage} \normalsize @@ -3309,6 +3311,8 @@ raggruppati in un solo evento. \subsection{L'interfaccia POSIX per l'I/O asincrono} \label{sec:file_asyncronous_io} +% vedere anche http://davmac.org/davpage/linux/async-io.html + Una modalità alternativa all'uso dell'\textit{I/O multiplexing} per gestione dell'I/O simultaneo su molti file è costituita dal cosiddetto \textsl{I/O asincrono}. Il concetto base dell'\textsl{I/O asincrono} è che le funzioni @@ -3346,7 +3350,7 @@ disponibilità dell'interfaccia per l'I/O asincrono. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\textwidth} \includestruct{listati/aiocb.h} \end{minipage} \normalsize @@ -4460,7 +4464,7 @@ essere letti o scritti ed in che quantità. Il primo campo della struttura, \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\textwidth} \includestruct{listati/iovec.h} \end{minipage} \normalsize @@ -4737,7 +4741,7 @@ definito la macro \macro{\_GNU\_SOURCE},\footnote{si ricordi che questa \item[\errcode{ENOMEM}] non c'è memoria sufficiente per l'operazione richiesta. \item[\errcode{ESPIPE}] o \param{off\_in} o \param{off\_out} non sono - \const{NULL} ma il corrispondente file descriptor è una \textit{pipe}. + \val{NULL} ma il corrispondente file descriptor è una \textit{pipe}. \end{errlist} } \end{functions} @@ -4871,9 +4875,9 @@ file destinazione. Il passo successivo è aprire il file sorgente (\texttt{\small 18--22}), quello di destinazione (\texttt{\small 23--27}) ed infine (\texttt{\small 28--31}) la \textit{pipe} che verrà usata come buffer. -\begin{figure}[!phtb] +\begin{figure}[!htbp] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\codesamplewidth} \includecodesample{listati/splicecp.c} \end{minipage} \normalsize @@ -5046,7 +5050,7 @@ allegati alla guida. \begin{figure}[!htbp] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\codesamplewidth} \includecodesample{listati/tee.c} \end{minipage} \normalsize @@ -5404,11 +5408,6 @@ livello di kernel. -%\subsection{L'utilizzo delle porte di I/O} -%\label{sec:file_io_port} -% -% TODO l'I/O sulle porte di I/O -% consultare le manpage di ioperm, iopl e outb % TODO non so dove trattarli, ma dal 2.6.39 ci sono i file handle, vedi % http://lwn.net/Articles/432757/