\label{tab:file_std_files}
\end{table}
-In \curfig\ si è utilizzata questa situazione come esempio, facendo
-riferimento ad un programma in cui lo \textit{standard input} è associato ad
-un file mentre lo \textit{standard output} e lo \textit{standard error} sono
-entrambi associati ad un altro file (e quindi utilizzano lo stesso inode).
+In \figref{tab:file_std_files} si è utilizzata questa situazione come esempio,
+facendo riferimento ad un programma in cui lo \textit{standard input} è
+associato ad un file mentre lo \textit{standard output} e lo \textit{standard
+ error} sono entrambi associati ad un altro file (e quindi utilizzano lo
+stesso inode).
Nelle vecchie versioni di Unix (ed anche in Linux fino al kernel 2.0.x) il
numero di file aperti era anche soggetto ad un limite massimo dato dalle
specificati da \var{mode}.
\bodydesc{La funzione ritorna il file descriptor in caso di successo e -1 in
- caso di errore. In questo caso la variabile \var{errno} viene impostata ad
- uno dei valori:
+ caso di errore. In questo caso la variabile \var{errno} assumerà uno dei
+ valori:
\begin{errlist}
\item[\macro{EEXIST}] \var{pathname} esiste e si è specificato
\macro{O\_CREAT} e \macro{O\_EXCL}.
solo per le fifo, torneremo questo in \secref{sec:ipc_named_pipe}). \\
\macro{O\_NOCTTY} & se \var{pathname} si riferisce ad un device di
terminale, questo non diventerà il terminale di controllo, anche se il
- processo non ne ha ancora uno (si veda \secref{sec:sess_xxx}). \\
+ processo non ne ha ancora uno (si veda \secref{sec:sess_ctrl_term}). \\
\macro{O\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi
\secref{sec:file_locking}) sul file. Non è disponibile in Linux. \\
\macro{O\_EXLOCK} & opzione di BSD, acquisisce uno lock esclusivo (vedi
dell'argomento \param{flags}. Alcuni di questi bit vanno anche a costituire
il flag di stato del file (o \textit{file status flag}), che è mantenuto nel
campo \var{f\_flags} della struttura \var{file} (al solito si veda lo schema
-di \curfig). Essi sono divisi in tre categorie principali:
+di \figref{fig:file_proc_file}). Essi sono divisi in tre categorie
+principali:
\begin{itemize}
\item \textsl{i bit delle modalità di accesso}: specificano con quale modalità
si accederà al file: i valori possibili sono lettura, scrittura o
Chiude il descrittore \var{fd}.
\bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
- ed in questo caso \var{errno} è impostata ai valori:
+ ed in questo caso \var{errno} assumerà uno dei valori:
\begin{errlist}
\item[\macro{EBADF}] \var{fd} non è un descrittore valido.
\item[\macro{EINTR}] la funzione è stata interrotta da un segnale.
Imposta la posizione attuale nel file.
\bodydesc{La funzione ritorna valore della posizione corrente in caso di
- successo e -1 in caso di errore nel qual caso \var{errno} viene impostata ad
- uno dei valori:
+ successo e -1 in caso di errore nel qual caso \var{errno} assumerà uno dei
+ valori:
\begin{errlist}
\item[\macro{ESPIPE}] \param{fd} è una pipe, un socket o una fifo.
\item[\macro{EINVAL}] \param{whence} non è un valore valido.
Non tutti i file supportano la capacità di eseguire una \func{lseek}, in
questo caso la funzione ritorna l'errore \macro{EPIPE}. Questo, oltre che per
i tre casi citati nel prototipo, vale anche per tutti quei dispositivi che non
-supportano questa funzione, come ad esempio per le \acr{tty}.\footnote{altri
- sistemi, usando \macro{SEEK\_SET}, in questo caso ritornano il numero di
- caratteri che vi sono stati scritti.} Lo standard POSIX però non specifica
-niente al proposito. Infine alcuni device, ad esempio \file{/dev/null}, non
-causano un errore ma restituiscono un valore indefinito.
+supportano questa funzione, come ad esempio per i file di
+terminale.\footnote{altri sistemi, usando \macro{SEEK\_SET}, in questo caso
+ ritornano il numero di caratteri che vi sono stati scritti.} Lo standard
+POSIX però non specifica niente al proposito. Infine alcuni file speciali, ad
+esempio \file{/dev/null}, non causano un errore ma restituiscono un valore
+indefinito.
\subsection{La funzione \func{read}}
Cerca di leggere \var{count} byte dal file \var{fd} al buffer \var{buf}.
\bodydesc{La funzione ritorna il numero di byte letti in caso di successo e
- -1 in caso di errore, nel qual caso \var{errno} viene impostata ad uno dei
- valori:
+ -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
\item[\macro{EINTR}] la funzione è stata interrotta da un segnale prima di
aver potuto leggere qualsiasi dato.
\var{offset}, nel buffer \var{buf}.
\bodydesc{La funzione ritorna il numero di byte letti in caso di successo e -1
- in caso di errore, nel qual caso \var{errno} viene impostata secondo i valori
- già visti per \func{read} e \func{lseek}.}
+ in caso di errore, nel qual caso \var{errno} assumerà i valori già visti per
+ \func{read} e \func{lseek}.}
\end{prototype}
\noindent che però diventa accessibile solo con la definizione della macro:
\begin{verbatim}
Scrive \var{count} byte dal buffer \var{buf} sul file \var{fd}.
\bodydesc{La funzione ritorna il numero di byte scritti in caso di successo
- e -1 in caso di errore, nel qual caso \var{errno} viene impostata ad uno dei
- valori:
+ e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
\item[\macro{EINVAL}] \var{fd} è connesso ad un oggetto che non consente la
scrittura.
\var{count} byte dal buffer \var{buf}.
\bodydesc{La funzione ritorna il numero di byte letti in caso di successo e -1
- in caso di errore, nel qual caso \var{errno} viene impostata secondo i valori
- già visti per \func{write} e \func{lseek}.}
+ in caso di errore, nel qual caso \var{errno} assumerà i valori già visti per
+ \func{write} e \func{lseek}.}
\end{prototype}
\noindent e per essa valgono le stesse considerazioni fatte per \func{pread}.
Crea una copia del file descriptor \param{oldfd}.
\bodydesc{La funzione ritorna il nuovo file descriptor in caso di successo e
- -1 in caso di errore, nel qual caso \var{errno} viene impostata ad uno dei
+ -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei
valori:
\begin{errlist}
\item[\macro{EBADF}] \param{oldfd} non è un file aperto.
Rende \param{newfd} una copia del file descriptor \param{oldfd}.
\bodydesc{La funzione ritorna il nuovo file descriptor in caso di successo e
- -1 in caso di errore, nel qual caso \var{errno} viene impostata ad uno dei
- valori:
+ -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
\item[\macro{EBADF}] \param{oldfd} non è un file aperto o \param{newfd} ha un
valore fuori dall'intervallo consentito per i file descriptor.
sul file \param{fd}.
\bodydesc{La funzione ha valori di ritorno diversi a seconda
- dell'operazione. In caso di errore il valore di ritorno è -1 e la
- variabile \var{errno} viene impostata ad un opportuno codice, quelli validi
- in generale sono:
+ dell'operazione. In caso di errore il valore di ritorno è sempre -1 ed il
+ codice dell'errore è restituito nella variabile \var{errno}; i codici
+ possibili dipendono dal tipo di operazione, l'unico valido in generale è:
\begin{errlist}
- \item[\macro{EBADF}] \param{oldfd} non è un file aperto.
+ \item[\macro{EBADF}] \param{fd} non è un file aperto.
\end{errlist}}
\end{functions}
nella terza sezione di \tabref{tab:file_open_flags}.\footnote{la pagina di
manuale riporta come impostabili solo \macro{O\_APPEND},
\macro{O\_NONBLOCK} e \macro{O\_ASYNC}.}
-\item[\macro{F\_GETLK}] se un file lock è attivo restituisce nella struttura
- \param{lock} la struttura \type{flock} che impedisce l'acquisizione del
- blocco, altrimenti imposta il campo \var{l\_type} a \macro{F\_UNLCK} (per i
- dettagli sul \textit{file locking} vedi \secref{sec:file_locking}).
-\item[\macro{F\_SETLK}] richiede il file lock specificato da \param{lock} se
- \var{l\_type} è \macro{F\_RDLCK} o \macro{F\_WRLLCK} o lo rilascia se
- \var{l\_type} è \macro{F\_UNLCK}. Se il lock è tenuto da qualcun'altro
- ritorna immediatamente restituendo -1 e imposta \var{errno} a \macro{EACCES} o
- \macro{EAGAIN} (per i dettagli sul \textit{file locking} vedi
- \secref{sec:file_locking}).
+\item[\macro{F\_GETLK}] richiede un controllo sul file lock specificato da
+ \param{lock}, sovrascrivendo la struttura da esso puntata con il risultato
+ (questa funzionalità è trattata in dettaglio in
+ \secref{sec:file_posix_lock}).
+\item[\macro{F\_SETLK}] richiede o rilascia un file lock a seconda di quanto
+ specificato nella struttura puntata da \param{lock}. Se il lock è tenuto da
+ qualcun'altro ritorna immediatamente restituendo -1 e imposta \var{errno} a
+ \macro{EACCES} o \macro{EAGAIN} (questa funzionalità è trattata in dettaglio
+ in \secref{sec:file_posix_lock}).
\item[\macro{F\_SETLKW}] identica a \macro{F\_SETLK} eccetto per il fatto che
la funzione non ritorna subito ma attende che il blocco sia rilasciato. Se
l'attesa viene interrotta da un segnale la funzione restituisce -1 e imposta
- \var{errno} a \macro{EINTR} (per i dettagli sul \textit{file locking} vedi
- \secref{sec:file_locking}).
+ \var{errno} a \macro{EINTR} (questa funzionalità è trattata in dettaglio in
+ \secref{sec:file_posix_lock}).
\item[\macro{F\_GETOWN}] restituisce il \acr{pid} del processo o il process
group che è preposto alla ricezione dei segnali \macro{SIGIO} e
\macro{SIGURG} per gli eventi associati al file descriptor \var{fd}. Il
\bodydesc{La funzione nella maggior parte dei casi ritorna 0, alcune
operazioni usano però il valore di ritorno per restituire informazioni. In
- caso di errore viene sempre restituito -1 e \var{errno} viene impostata ad
- uno dei valori seguenti:
+ caso di errore viene sempre restituito -1 ed \var{errno} assumerà uno dei
+ valori:
\begin{errlist}
\item[\macro{ENOTTY}] il file \param{fd} non è associato con un device, o la
richiesta non è applicabile all'oggetto a cui fa riferimento \param{fd}.