%% fileio.tex (merge fileunix.tex - filestd.tex)
%%
-%% Copyright (C) 2000-2012 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2013 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",
Come si può notare alla fine il collegamento che consente di porre in
relazione i file ed i processi è effettuato attraverso i dati mantenuti nella
-struttura \kstruct{files\_struct}, essa infatti contiene alcune informazioni
+struttura \kstruct{files\_struct} essa infatti contiene alcune informazioni
essenziali come:
\begin{itemize*}
\item i flag relativi ai file aperti dal processo.
\item il numero di file aperti dal processo.
-\item una tabella di puntatori alla relativa voce nella \itindex{file~table}
- \textit{file table} per ciascun file aperto.
+\item la \itindex{file~descriptor~table} \textit{file descriptor table}, una
+ tabella con i puntatori, per ciascun file aperto, alla relativa voce nella
+ \itindex{file~table} \textit{file table}.
\end{itemize*}
In questa infrastruttura un \textit{file descriptor} non è altro che l'intero
\itindex{standard~output} \textit{standard
output}.\\
\const{STDERR\_FILENO} & \textit{file descriptor} dello \textit{standard
- error}\\
+ error}.\\
\hline
\end{tabular}
\caption{Costanti definite in \headfile{unistd.h} per i file standard.}
\label{tab:open_time_flag}
\end{table}
+
+% TODO: aggiungere O_TMPFILE per la creazione di file temporanei senza che
+% questi appaiano sul filesystem, introdotto con il 3.11, vedi:
+% https://lwn.net/Articles/556512/, http://kernelnewbies.org/Linux_3.11
+
\footnotetext{acronimo di \itindex{Denial~of~Service~(DoS)} \textit{Denial of
Service}, si chiamano così attacchi miranti ad impedire un servizio
causando una qualche forma di carico eccessivo per il sistema, che resta
e viene emulata, per questo possono verificarsi
\itindex{race~condition} \textit{race
condition} con una sovrapposizione dei dati se
- più di un processo scrive allo stesso tempo. \\
+ più di un processo scrive allo stesso tempo.\\
\const{O\_ASYNC} & Apre il file per l'I/O in modalità asincrona (vedi
sez.~\ref{sec:signal_driven_io}). Quando è
impostato viene generato il segnale \signal{SIGIO}
{La funzione ritorna il valore della posizione sul file in caso di successo e
$-1$ per un errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{ESPIPE}] \param{fd} è una pipe, un socket o una fifo.
\item[\errcode{EINVAL}] \param{whence} non è un valore valido.
\item[\errcode{EOVERFLOW}] \param{offset} non può essere rappresentato nel
+ \item[\errcode{ESPIPE}] \param{fd} è una pipe, un socket o una fifo.
tipo \type{off\_t}.
\end{errlist}
ed inoltre \errval{EBADF} nel suo significato generico.}
porta alla fine del file se non ci sono \textit{hole}
dopo \param{offset} (dal kernel 3.1).\\
\hline
- \end{tabular} \caption{Possibili valori per l'argomento \param{whence} di
- \func{lseek}.}
+ \end{tabular}
+ \caption{Possibili valori per l'argomento \param{whence} di \func{lseek}.}
\label{tab:lseek_whence_values}
\end{table}
{La funzione ritorna il numero di byte scritti in caso di successo e $-1$ per
un errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EAGAIN}] ci si sarebbe bloccati, ma il file era aperto in
+ \item[\errcode{EAGAIN}] ci siq sarebbe bloccati, ma il file era aperto in
modalità \const{O\_NONBLOCK}.
\item[\errcode{EFBIG}] si è cercato di scrivere oltre la dimensione massima
consentita dal filesystem o il limite per le dimensioni dei file del
\item[\errcode{EINVAL}] \param{fd} è un \index{file!speciali} file speciale
che non supporta la sincronizzazione.
\end{errlist}
- ed inoltre \errval{EBADF}, \errval{EROFS} e \errval{EIO} nel loro
+ ed inoltre \errval{EBADF}, \errval{EIO} e \errval{EROFS} nel loro
significato generico.}
\end{funcproto}
% TODO manca prototipo di linkat, verificare se metterlo o metter menzione
+% altre modifiche al riguardo nel 3.11 (AT_EMPTY_PATH?) vedi
+% http://lwn.net/Articles/562488/
% TODO manca prototipo di utimensat, verificare se metterlo o metter menzione
Per tutte le funzioni che lo prevedono, a parte \func{unlinkat} e
sempre $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei
valori:
\begin{errlist}
+ \item[\errcode{EINVAL}] gli argomenti \param{request} o \param{argp} non sono
+ validi.
\item[\errcode{ENOTTY}] il file \param{fd} non è associato con un
dispositivo, o la richiesta non è applicabile all'oggetto a cui fa
riferimento \param{fd}.
- \item[\errcode{EINVAL}] gli argomenti \param{request} o \param{argp} non sono
- validi.
\end{errlist}
ed inoltre \errval{EBADF} e \errval{EFAULT} nel loro significato generico.}
\end{funcproto}
\textbf{Valore} & \textbf{Significato}\\
\hline
\hline
- \val{\#} & Chiede la conversione in forma alternativa. \\
+ \val{\#} & Chiede la conversione in forma alternativa.\\
\val{0} & La conversione è riempita con zeri alla sinistra del valore.\\
\val{-} & La conversione viene allineata a sinistra sul bordo del campo.\\
\val{' '}& Mette uno spazio prima di un numero con segno di valore