X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileio.tex;h=3091504cb8af091ebc5ed9d3bcf7e1cc82337b2c;hp=16a8ca824f86999010a18662f48d15c36df3c9d5;hb=de137402ded9a730854f908315767d73c5308d9d;hpb=be0113897fdc6774f0dcc3f9c91fe5e76c5dd0a5 diff --git a/fileio.tex b/fileio.tex index 16a8ca8..3091504 100644 --- a/fileio.tex +++ b/fileio.tex @@ -1,6 +1,6 @@ %% fileio.tex (merge fileunix.tex - filestd.tex) %% -%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2016 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -59,10 +59,10 @@ file dovrà essere chiuso, e questo chiuderà il canale di comunicazione impedendo ogni ulteriore operazione. All'interno di ogni processo i file aperti sono identificati da un numero -intero non negativo, che viene chiamato \textit{file descriptor}. Quando un -file viene aperto la funzione \func{open} restituisce questo numero, tutte le -ulteriori operazioni dovranno essere compiute specificando questo stesso -numero come argomento alle varie funzioni dell'interfaccia. +intero non negativo, che viene chiamato appunto \textit{file descriptor}. +Quando un file viene aperto la funzione \func{open} restituisce questo numero, +tutte le ulteriori operazioni dovranno essere compiute specificando questo +stesso numero come argomento alle varie funzioni dell'interfaccia. \itindbeg{process~table} \itindbeg{file~table} @@ -109,7 +109,7 @@ particolare: \centering \includegraphics[width=12cm]{img/procfile} \caption{Schema della architettura dell'accesso ai file attraverso - l'interfaccia dei \textit{file descriptor}.} + l'interfaccia dei file descriptor.} \label{fig:file_proc_file} \end{figure} @@ -133,18 +133,18 @@ essenziali come: \textit{file table}. \end{itemize*} -In questa infrastruttura un \textit{file descriptor} non è altro che l'intero -positivo che indicizza quest'ultima tabella, e che consente di recuperare il -puntatore alla struttura \kstruct{file} corrispondente al file aperto dal -processo a cui era stato assegnato questo indice. Una volta ottenuta grazie al -\textit{file descriptor} la struttura \kstruct{file} corrispondente al file -voluto nella \textit{file table}, il kernel potrà usare le funzioni messe -disposizione dal VFS per eseguire sul file tutte le operazioni necessarie. +In questa infrastruttura un file descriptor non è altro che l'intero positivo +che indicizza quest'ultima tabella, e che consente di recuperare il puntatore +alla struttura \kstruct{file} corrispondente al file aperto dal processo a cui +era stato assegnato questo indice. Una volta ottenuta grazie al file +descriptor la struttura \kstruct{file} corrispondente al file voluto nella +\textit{file table}, il kernel potrà usare le funzioni messe disposizione dal +VFS per eseguire sul file tutte le operazioni necessarie. Il meccanismo dell'apertura dei file prevede che venga sempre fornito il primo -\textit{file descriptor} libero nella tabella, e per questo motivo essi -vengono assegnati in successione tutte le volte che si apre un nuovo file, -posto che non ne sia stato chiuso nessuno in precedenza. +file descriptor libero nella tabella, e per questo motivo essi vengono +assegnati in successione tutte le volte che si apre un nuovo file, posto che +non ne sia stato chiuso nessuno in precedenza. \itindbeg{standard~input} \itindbeg{standard~output} @@ -178,12 +178,9 @@ tab.~\ref{tab:file_std_files}. \textbf{File} & \textbf{Significato} \\ \hline \hline - \constd{STDIN\_FILENO} & \textit{file descriptor} dello \textit{standard - input}.\\ - \constd{STDOUT\_FILENO} & \textit{file descriptor} dello \textit{standard - output}.\\ - \constd{STDERR\_FILENO} & \textit{file descriptor} dello \textit{standard - error}.\\ + \constd{STDIN\_FILENO} & file descriptor dello \textit{standard input}.\\ + \constd{STDOUT\_FILENO} & file descriptor dello \textit{standard output}.\\ + \constd{STDERR\_FILENO} & file descriptor dello \textit{standard error}.\\ \hline \end{tabular} \caption{Costanti definite in \headfile{unistd.h} per i file standard.} @@ -265,9 +262,9 @@ corrispondente,\footnote{è \func{open} che alloca \kstruct{file}, la inserisce \item[\errcode{ENOTDIR}] si è specificato \const{O\_DIRECTORY} e \param{pathname} non è una directory. \item[\errcode{ENXIO}] si sono impostati \const{O\_NONBLOCK} o - \const{O\_WRONLY} ed il file è una fifo che non viene letta da nessun - processo o \param{pathname} è un file di dispositivo ma il dispositivo è - assente. + \const{O\_WRONLY} ed il file è una \textit{fifo} che non viene letta da + nessun processo o \param{pathname} è un file di dispositivo ma il + dispositivo è assente. \item[\errcode{EPERM}] si è specificato \const{O\_NOATIME} e non si è né amministratori né proprietari del file. \item[\errcode{ETXTBSY}] si è cercato di accedere in scrittura all'immagine @@ -410,7 +407,7 @@ sez.~\ref{sec:file_fcntl_ioctl}). serve ad evitare dei possibili \itindex{Denial~of~Service~(DoS)} \textit{DoS}\footnotemark quando \func{opendir} - viene chiamata su una fifo o su un dispositivo + viene chiamata su una \textit{fifo} o su un dispositivo associato ad una unità a nastri. Non viene usato al di fuori dell'implementazione di \func{opendir}, ed è utilizzabile soltanto se si è @@ -442,7 +439,7 @@ sez.~\ref{sec:file_fcntl_ioctl}). la macro \macro{\_GNU\_SOURCE}.\\ \constd{O\_TRUNC} & Se usato su un file di dati aperto in scrittura, ne tronca la lunghezza a zero; con un terminale o - una fifo viene ignorato, negli altri casi il + una \textit{fifo} viene ignorato, negli altri casi il comportamento non è specificato.\\ \hline \end{tabular} @@ -515,7 +512,7 @@ si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il tutte le volte che il file è pronto per le operazioni di lettura o scrittura. Questo flag si può usare solo terminali, pseudo-terminali e socket - e, a partire dal kernel 2.6, anche sulle fifo. Per + e, a partire dal kernel 2.6, anche sulle \textit{fifo}. Per un bug dell'implementazione non è opportuno usarlo in fase di apertura del file, deve invece essere attivato successivamente con @@ -552,7 +549,7 @@ si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il blocco delle stesse in attesa di una successiva possibilità di esecuzione come avviene normalmente. Questa modalità ha senso solo per le - fifo, vedi sez.~\ref{sec:ipc_named_pipe}), o quando + \textit{fifo}, vedi sez.~\ref{sec:ipc_named_pipe}), o quando si vuole aprire un file di dispositivo per eseguire una \func{ioctl} (vedi sez.~\ref{sec:file_fcntl_ioctl}).\\ @@ -1330,7 +1327,7 @@ standard che si vuole redirigere e poi aprire direttamente con \func{open} il file vi si vuole far corrispondere, invece di duplicare un file descriptor che si è già aperto. La risposta sta nel fatto che il file che si vuole redirigere non è detto sia un file regolare, ma potrebbe essere, come accennato, anche -una fifo o un socket, oppure potrebbe essere un file associato ad un file +una \textit{fifo} o un socket, oppure potrebbe essere un file associato ad un file descriptor che si è ereditato già aperto (ad esempio attraverso un'altra \func{exec}) da un processo antenato del padre, del quale non si conosce il nome. Operando direttamente con i file descriptor \func{dup} consente di @@ -1471,7 +1468,7 @@ scarico dei dati ad intervalli di tempo fissi. Con le nuove versioni del kernel queste operazioni vengono gestite direttamente dal sistema della memoria virtuale, attraverso opportuni \textit{task} interni al kernel il cui comportamento può essere controllato attraverso il file -\sysctlfile{vm/bdflush}.\footnote{per il significato dei valori che si possono +\sysctlfiled{vm/bdflush}.\footnote{per il significato dei valori che si possono scrivere in questo file si consulti la documentazione allegata ai sorgenti del kernel nel file \file{Documentation/sysctl/vm.txt}, trattandosi di argomenti di natura sistemistica non li prenderemo in esame.} Si tenga @@ -1861,7 +1858,7 @@ costanti utilizzabili per i valori di \param{flags}. Un'ultima differenza fra le \textit{at-functions} e le funzioni tradizionali di cui sono estensione è, come accennato in sez.~\ref{sec:file_temp_file}, -quella relativa a \funcm{utimensat} che non è propriamente una corrispondente +quella relativa a \func{utimensat} che non è propriamente una corrispondente esatta di \func{utimes} e \func{lutimes}, dato che questa funzione ha una maggiore precisione nella indicazione dei tempi dei file, per i quali come per \func{futimes}, si devono usare strutture \struct{timespec} che consentono una @@ -2219,7 +2216,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito: \const{F\_GETPIPE\_SZ}. I processi non privilegiati\footnote{per la precisione occorre la capacità \const{CAP\_SYS\_RESOURCE}.} non possono impostare un valore valore superiore a quello indicato da - \sysctlfile{fs/pipe-size-max}. Il comando è specifico di Linux, è + \sysctlfiled{fs/pipe-size-max}. Il comando è specifico di Linux, è disponibile solo a partire dal kernel 2.6.35, ed è utilizzabile solo se si è definita la macro \macro{\_GNU\_SOURCE}. @@ -2462,7 +2459,7 @@ concorrente ed in sez.~\ref{sec:file_access_control} per il controllo di accesso. Per ragioni storiche la struttura di dati che rappresenta uno \textit{stream} -è stata chiamata \type{FILE}, questi oggetti sono creati dalle funzioni di +è stata chiamata \typed{FILE}, questi oggetti sono creati dalle funzioni di libreria e contengono tutte le informazioni necessarie a gestire le operazioni sugli \textit{stream}, come la posizione corrente, lo stato del buffer e degli indicatori di stato e di fine del file. @@ -2632,7 +2629,7 @@ esso viene preventivamente chiuso e tutti i dati pendenti vengono scaricati. Infine \func{fdopen} viene usata per associare uno \textit{stream} ad un file descriptor esistente ottenuto tramite una altra funzione (ad esempio con una \func{open}, una \func{dup}, o una \func{pipe}) e serve quando si vogliono -usare gli \textit{stream} con file come le fifo o i socket, che non possono +usare gli \textit{stream} con file come le \textit{fifo} o i socket, che non possono essere aperti con le funzioni delle librerie standard del C. \begin{table}[htb] @@ -2873,9 +2870,9 @@ all'interno di un file per effettuare operazioni di lettura o scrittura in un punto prestabilito, sempre che l'operazione di riposizionamento sia supportata dal file sottostante lo \textit{stream}, nel caso cioè in cui si ha a che fare con quello che viene detto un file ad \textsl{accesso casuale}. Dato che in un -sistema Unix esistono vari tipi di file, come le fifo ed i file di dispositivo -(ad esempio i terminali), non è scontato che questo sia vero in generale, pur -essendolo sempre nel caso di file di dati. +sistema Unix esistono vari tipi di file, come le \textit{fifo} ed i file di +dispositivo (ad esempio i terminali), non è scontato che questo sia vero in +generale, pur essendolo sempre nel caso di file di dati. Con Linux ed in generale in ogni sistema unix-like la posizione nel file, come abbiamo già visto in sez.~\ref{sec:file_lseek}, è espressa da un intero @@ -2940,7 +2937,7 @@ intero di tipo \ctyp{long}. Dato che in certi casi, ad esempio quando si usa un filesystem indicizzato a 64 bit su una macchina con architettura a 32 bit, questo può non essere possibile lo standard POSIX ha introdotto le nuove funzioni \funcd{fgetpos} e \funcd{fsetpos}, che invece usano il nuovo tipo -\type{fpos\_t}, ed i cui prototipi sono: +\typed{fpos\_t}, ed i cui prototipi sono: \begin{funcproto}{ \fhead{stdio.h} @@ -4075,7 +4072,6 @@ compresi gli eventuali caratteri rimandati indietro con \func{ungetc}. \subsection{Gli \textit{stream} e i \textit{thread}} \label{sec:file_stream_thread} -\itindbeg{thread} Gli \textit{stream} possono essere usati in applicazioni \textit{multi-thread} allo stesso modo in cui sono usati nelle applicazioni normali, ma si deve @@ -4197,8 +4193,6 @@ con uno dei valori \const{FSETLOCKING\_INTERNAL} o % TODO trattare \func{clearerr\_unlocked} -\itindend{thread} - %%% Local Variables: