From e9f696e821da4bcebaf86f34c0dd459a775ef952 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Mon, 13 Feb 2012 08:57:20 +0000 Subject: [PATCH] inixio fcntl --- fileio.tex | 55 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/fileio.tex b/fileio.tex index bb5c99b..27681b7 100644 --- a/fileio.tex +++ b/fileio.tex @@ -1875,8 +1875,8 @@ funzionalità che il kernel può mettere a disposizione.\footnote{ad esempio si \textit{file locking} (vedi sez.~\ref{sec:file_locking}).} Per queste operazioni di manipolazione e di controllo delle varie proprietà e -caratteristiche di un file descriptor, viene usata la funzione \funcd{fcntl}, -il cui prototipo è: +caratteristiche di un file descriptor, viene usata la funzione di sistema +\funcd{fcntl}, il cui prototipo è: \begin{funcproto}{ \fhead{unistd.h} @@ -1912,27 +1912,32 @@ per \var{cmd} è riportata di seguito: errori possibili sono \errcode{EINVAL} se \param{arg} è negativo o maggiore del massimo consentito o \errcode{EMFILE} se il processo ha già raggiunto il massimo numero di descrittori consentito. -\item[\const{F\_SETFD}] imposta il valore del \textit{file descriptor flag} al +\item[\const{F\_DUPFD\_CLOEXEC}] ha lo stesso effetto di \const{F\_DUPFD}, ma + in più attiva il flag di \itindex{close-on-exec} \textit{close-on-exec} sul + nuovo file descriptor duplicato, in modo da evitare una successiva chiamata + con \const{F\_SETFD}. Introdotta con il kernel 2.6.24. +\item[\const{F\_GETFD}] ritorna il valore dei \textit{file descriptor flags} di + \param{fd} o $-1$ in caso di errore, \param{arg} viene ignorato. Se + \const{FD\_CLOEXEC} è impostato i file descriptor aperti vengono chiusi + attraverso una \func{exec} altrimenti (il comportamento predefinito) restano + aperti. +\item[\const{F\_SETFD}] imposta il valore dei \textit{file descriptor flags} al valore specificato con \param{arg}. Al momento l'unico bit usato è quello di \itindex{close-on-exec} \textit{close-on-exec}, identificato dalla costante \const{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella esecuzione di una \func{exec} (vedi sez.~\ref{sec:proc_exec}). Ritorna un valore nullo in caso di successo e $-1$ in caso di errore. -\item[\const{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di - \param{fd} o $-1$ in caso di errore; se \const{FD\_CLOEXEC} è impostato i - file descriptor aperti vengono chiusi attraverso una \func{exec} altrimenti - (il comportamento predefinito) restano aperti. -\item[\const{F\_GETFL}] ritorna il valore del \textit{file status flag} in +\item[\const{F\_GETFL}] ritorna il valore dei \textit{file status flags} in caso di successo o $-1$ in caso di errore; permette cioè di rileggere quei - bit impostati da \func{open} all'apertura del file che vengono memorizzati, - quelli riportati in tab.~\ref{tab:open_access_mode_flag} e + valori dell'argomento \param{flags} di \func{open} che vengono memorizzati, + più precisamente quelli riportati in tab.~\ref{tab:open_access_mode_flag} e tab.~\ref{tab:open_operation_flag}). \item[\const{F\_SETFL}] imposta il \textit{file status flag} al valore specificato da \param{arg}, ritorna un valore nullo in caso di successo o - $-1$ in caso di errore. Possono essere impostati solo i bit riportati in - tab.~\ref{tab:open_operation_flag}.\footnote{la pagina di manuale riporta - come impostabili solo \const{O\_APPEND}, \const{O\_NONBLOCK} e - \const{O\_ASYNC}.} + $-1$ in caso di errore. Possono essere impostati solo flag fra quelli + riportati in tab.~\ref{tab:open_operation_flag}. su Linux si possono + modificare soltanto \const{O\_APPEND}, \const{O\_ASYNC}, \const{O\_DIRECT}, + \const{O\_NOATIME} e \const{O\_NONBLOCK}. \item[\const{F\_GETLK}] richiede un controllo sul file lock specificato da \param{lock}, sovrascrivendo la struttura da esso puntata con il risultato; ritorna un valore nullo in caso di successo o $-1$ in caso di errore. Questa @@ -1955,21 +1960,25 @@ per \var{cmd} è riportata di seguito: (vedi sez.~\ref{sec:sess_proc_group}) raggruppamenti di processi usati nel controllo di sessione; a ciascuno di essi è associato un identificatore (un numero positivo analogo al \ids{PID}).} che è preposto alla ricezione - dei segnali \signal{SIGIO}\footnote{o qualunque altro segnale alternativo - impostato con \const{F\_FSETSIG}.} per gli eventi associati al file + dei segnali \signal{SIGIO} (o qualunque altro segnale alternativo impostato + con \const{F\_FSETSIG}) per gli eventi associati al file descriptor \param{fd}\footnote{il segnale viene usato sia per il \textit{Signal Drive I/O}, che tratteremo in - sez.~\ref{sec:file_asyncronous_operation}, e dai vari meccanismi di + sez.~\ref{sec:file_asyncronous_operation}, che dai vari meccanismi di notifica asincrona, che tratteremo in sez.~\ref{sec:file_asyncronous_lease}.} e \signal{SIGURG} per la notifica - dei dati urgenti di un socket.\footnote{vedi - sez.~\ref{sec:TCP_urgent_data}.} Nel caso di un \textit{process group} - viene restituito un valore negativo il cui valore assoluto corrisponde - all'identificatore del \itindex{process~group} \textit{process group}. In - caso di errore viene restituito $-1$. + dei dati urgenti di un socket (vedi sez.~\ref{sec:TCP_urgent_data}). Nel + caso di un \textit{process group} viene restituito un valore negativo il cui + valore assoluto corrisponde all'identificatore del \itindex{process~group} + \textit{process group}.\footnote{si tenga presente però che se questo valore + è compreso nell'intervallo fra $-1$ e $-4095$ questo viene interpretato + dalla \acr{glibc} come un errore per cui in tal caso \func{fcntl} + ritornerà comunque $-1$ mentre il valore restituito dalla \textit{system + call} verrà assegnato ad \var{errno}, cambiato di segno.} In caso di + errore viene restituito $-1$. \item[\const{F\_SETOWN}] imposta, con il valore dell'argomento \param{arg}, l'identificatore del processo o del \itindex{process~group} \textit{process - group} che riceverà i segnali \signal{SIGIO} e \signal{SIGURG} per gli + group} che riceverà i segnali \signal{SIGIO} e \signal{SIGURG} per gli eventi associati al file descriptor \param{fd}, ritorna un valore nullo in caso di successo o $-1$ in caso di errore. Come per \const{F\_GETOWN}, per impostare un \itindex{process~group} \textit{process group} si deve usare -- 2.30.2