X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=a8a7d781255c6b31fac6583d12c538ad0be33bac;hp=cacce238b486c7ad5e557067b3341e1c1530f710;hb=aa5d63f2af4475ae1188f695a33e4d0bee55f787;hpb=7090500d79c488db306ed0c065b90bb0c0505430 diff --git a/fileunix.tex b/fileunix.tex index cacce23..a8a7d78 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -1,6 +1,7 @@ \chapter{I file: l'interfaccia standard Unix} \label{cha:file_unix_interface} + Esamineremo in questo capitolo la prima delle due interfacce di programmazione per i file, quella dei \textit{file descriptor}, nativa di Unix. Questa è l'interfaccia di basso livello provvista direttamente dalle system call, che @@ -13,7 +14,7 @@ dallo standard ANSI C che affronteremo al \capref{cha:files_std_interface}. \section{L'architettura di base} \label{sec:file_base_arch} -In questa sezione faremo una breve introduzione sulla architettura su cui è +In questa sezione faremo una breve introduzione sull'architettura su cui è basata dell'interfaccia dei \textit{file descriptor}, che, sia pure con differenze nella realizzazione pratica, resta sostanzialmente la stessa in tutte le implementazione di un sistema unix-like. @@ -81,7 +82,7 @@ varie strutture di dati sulla quale essa \centering \includegraphics[width=13cm]{img/procfile} \caption{Schema della architettura dell'accesso ai file attraverso - l'interfaccia dei \textit{file descriptor}} + l'interfaccia dei \textit{file descriptor}.} \label{fig:file_proc_file} \end{figure} Ritorneremo su questo schema più volte, dato che esso è fondamentale per @@ -264,15 +265,16 @@ sempre il file descriptor con il valore pi file. Può causare corruzione del file con NFS se più di un processo scrive allo stesso tempo.\footnotemark\\ \macro{O\_NONBLOCK} & il file viene aperto in modalità non bloccante per - le operazioni di I/O: questo significa il fallimento di una \func{read} in - assenza di dati da leggere e quello di una \func{write} in caso di + le operazioni di I/O: questo significa il fallimento di \func{read} in + assenza di dati da leggere e quello di \func{write} in caso di impossibilità di scrivere immediatamente. L'opzione è effettiva solo per le fifo e per alcuni file di dispositivo. \\ \macro{O\_NDELAY} & in Linux\footnotemark\ è sinonimo di \macro{O\_NONBLOCK}.\\ - \macro{O\_ASYNC} & apre il file per l'input/output in modalità - asincrona. Quando è settato viene generato un segnale di \macro{SIGIO} - tutte le volte che è disponibile dell'input sul file. \\ + \macro{O\_ASYNC} & apre il file per l'I/O in modalità + asincrona (vedi \secref{sec:file_asyncronous_io}). Quando è settato viene + generato il segnale \macro{SIGIO} tutte le volte che sono disponibili + dati in input sul file. \\ \macro{O\_SYNC} & apre il file per l'input/output sincrono, ogni \func{write} bloccherà fino al completamento della scrittura di tutti dati sul sull'hardware sottostante.\\ @@ -317,7 +319,7 @@ Il nuovo file descriptor non sulla condivisione dei file, in genere accessibile dopo una \func{fork}, in \secref{sec:file_sharing}). Il nuovo file descriptor è settato di default per restare aperto attraverso una \func{exec} (come accennato in -\secref{sec:proc_exec}) ed l'offset è settato all'inizio del file. +\secref{sec:proc_exec}) e l'offset è settato all'inizio del file. L'argomento \param{mode} specifica i permessi con cui il file viene eventualmente creato; i valori possibili sono gli stessi già visti in @@ -549,7 +551,7 @@ In realt \macro{EAGAIN} non sono errori. La prima si verifica quando la \func{read} è bloccata in attesa di dati in ingresso e viene interrotta da un segnale; in tal caso l'azione da prendere è quella di rieseguire la funzione. Torneremo -sull'argomento in \secref{sec:signal_xxx}. +sull'argomento in \secref{sec:sig_gen_beha}. La seconda si verifica quando il file è in modalità non bloccante e non ci sono dati in ingresso: la funzione allora ritorna immediatamente con un errore @@ -1006,11 +1008,13 @@ valori segnali \macro{SIGIO} e \macro{SIGURG} per gli eventi associati al file descriptor \var{fd}. I process group sono settati usando valori negativi. \item[\macro{F\_GETSIG}] restituisce il segnale mandato quando ci sono dati - disponibili in input sul file descriptor. Il valore 0 indica il default (che - è \macro{SIGIO}), un valore diverso da zero indica il segnale richiesto, - (che può essere lo stesso \macro{SIGIO}), nel qual caso al manipolatore del - segnale, se installato con \macro{SA\_SIGINFO}, vengono rese disponibili - informazioni ulteriori informazioni. + disponibili in input su un file descriptor aperto o settato in I/O + asincrono. Il valore 0 indica il default (che è \macro{SIGIO}), un valore + diverso da zero indica il segnale richiesto, (che può essere lo stesso + \macro{SIGIO}).\footnote{in questo caso al manipolatore del segnale, se + installato come \var{sa\_sigaction} con \macro{SA\_SIGINFO}, vengono rese + disponibili informazioni ulteriori informazioni (vedi + \secref{sec:sig_sigaction} e \secref{sec:file_asyncronous_io})}. \item[\macro{F\_SETSIG}] setta il segnale da inviare quando diventa possibile effettuare I/O sul file descriptor. Il valore zero indica il default (\macro{SIGIO}), ogni altro valore permette di rendere disponibile al