From 735e4c85ad9c58064b35113ea3e85832ae9a4111 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sat, 30 Jun 2007 23:50:29 +0000 Subject: [PATCH] Finite le integrazioni a ioctl, documentata FIOQSIZE. --- fileunix.tex | 57 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/fileunix.tex b/fileunix.tex index f29b014..b3003e1 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -1451,7 +1451,7 @@ il valore dell'argomento \param{request}. Il terzo argomento dipende dall'operazione prescelta; tradizionalmente è specificato come \code{char * argp}, da intendersi come puntatore ad un area di memoria generica,\footnote{all'epoca della creazione di questa funzione infatti ancora - non era stato introdotto il tipo \ctype{void}.} ma per certe operazioni può + non era stato introdotto il tipo \ctyp{void}.} ma per certe operazioni può essere omesso, e per altre è un semplice intero. Normalmente la funzione ritorna zero in caso di successo e $-1$ in caso di @@ -1471,6 +1471,10 @@ elenco di alcuni esempi di esse \item l'impostazione della velocità trasmissione di una linea seriale. \item l'impostazione della frequenza e della durata dei suoni emessi dallo speaker. +\item l'impostazione degli attributi dei file su un filesystem + ext2.\footnote{i comandi \texttt{lsattr} e \texttt{chattr} fanno questo con + delle \func{ioctl} dedicate, usabili solo su questo filesystem e derivati + successivi (come ext3).} \end{itemize*} In generale ogni dispositivo ha un suo insieme di operazioni specifiche @@ -1496,21 +1500,29 @@ seguito\footnote{per l'uso di \func{ioctl} con i socket si veda sez.~\ref{sec:sock_ctrl_func}.} quelle relative ad alcuni casi specifici (ad esempio la gestione dei terminali è effettuata attraverso \func{ioctl} in quasi tutte le implementazioni di Unix), qui riportiamo solo l'elenco delle -operazioni che sono definite per i file ordinari, caratterizzate dal prefisso -\texttt{FIO}: +operazioni che sono predefinite per qualunque file,\footnote{in particolare + queste operazioni sono definite nel kernel a livello generale, e vengono + sempre interpretate per prime, per cui, come illustrato in \cite{LinDevDri}, + eventuali operazioni specifiche che usino lo stesso valore verrebbero + ignorate.} caratterizzate dal prefisso \texttt{FIO}: \begin{basedescript}{\desclabelwidth{2.0cm}} \item[\const{FIOCLEX}] imposta il flag di \itindex{close-on-exec} \textit{close-on-exec} sul file, in questo caso, essendo usata come - operazione logica, \func{ioctl} non richiede un terzo argomento. + operazione logica, \func{ioctl} non richiede un terzo argomento, il cui + eventuale valore viene ignorato. \item[\const{FIONCLEX}] cancella il flag di \itindex{close-on-exec} \textit{close-on-exec} sul file, in questo caso, essendo usata come - operazione logica, \func{ioctl} non richiede un terzo argomento. -\item[\const{FIOASYNC}] abilita la modalità di I/O asincrono sul file (vedi - sez.~\ref{sec:file_asyncronous_operation}); il terzo argomento deve essere - un puntatore ad un intero (cioè di tipo \texttt{const int *}). -\item[\const{FIONBIO}] abilita sul file l'I/O in modalità non bloccante; il - terzo argomento deve essere un puntatore ad un intero (cioè di tipo - \texttt{const int *}). + operazione logica, \func{ioctl} non richiede un terzo argomento, il cui + eventuale valore viene ignorato. +\item[\const{FIOASYNC}] abilita o disabilita la modalità di I/O asincrono sul + file (vedi sez.~\ref{sec:file_asyncronous_operation}); il terzo argomento + deve essere un puntatore ad un intero (cioè di tipo \texttt{const int *}) + che contiene un valore logico (un valore nullo disabilita, un valore non + nullo abilita). +\item[\const{FIONBIO}] abilita o disabilita sul file l'I/O in modalità non + bloccante; il terzo argomento deve essere un puntatore ad un intero (cioè di + tipo \texttt{const int *}) che contiene un valore logico (un valore nullo + disabilita, un valore non nullo abilita). \item[\const{FIOSETOWN}] imposta il processo che riceverà i segnali \const{SIGURG} e \const{SIGIO} generati sul file; il terzo argomento deve essere un puntatore ad un intero (cioè di tipo \texttt{const int *}) il cui @@ -1526,14 +1538,23 @@ operazioni che sono definite per i file ordinari, caratterizzate dal prefisso (vedi sez.~\ref{sec:file_epoll}).} il terzo argomento deve essere un puntatore ad un intero (cioè di tipo \texttt{int *}) su cui sarà restituito il valore. -%\item[\const{FIOQSIZE}] che cavolo è ? Get exact space used by quota. +\item[\const{FIOQSIZE}] restituisce la dimensione corrente di un file o di una + directory, mentre se applicata ad un dispositivo fallisce con un errore di + \errcode{ENOTTY}; il terzo argomento deve essere un puntatore ad un intero + (cioè di tipo \texttt{int *}) su cui sarà restituito il valore. \end{basedescript} - - -Si noti però come in questo caso la gran parte di queste operazioni (per -essere precisi le prime sei dell'elenco) siano effettuabili in maniera -generica anche tramite l'uso di \func{fcntl}. +Si noti però come la gran parte di queste operazioni (per essere precisi le +prime sei dell'elenco) siano effettuabili in maniera generica anche tramite +l'uso di \func{fcntl}. Le due funzioni infatti sono molto simili e la presenza +di questa sovrapposizione è principalmente dovuta al fatto che alle origini di +Unix i progettisti considerarono che era necessario trattare diversamente +rispetto alle operazione di controllo delle modalità di I/O file e dispositivi +usando \func{fcntl} per i primi e \func{ioctl} per i +secondi;\footnote{all'epoca tra l'altro i dispositivi che usavano \func{ioctl} + erano sostanzialmente solo i terminali, il che spiega l'uso comune di + \errcode{ENOTTY} come codice di errore.} oggi non è più così ma le due +funzioni sono rimaste. % LocalWords: descriptor system call cap like kernel sez l'inode inode VFS tab @@ -1562,7 +1583,7 @@ generica anche tramite l'uso di \func{fcntl}. % LocalWords: fchownat chown fstatat futimesat utimes linkat mknodat mknod % LocalWords: readlinkat readlink renameat rename symlinkat symlink unlink % LocalWords: mkfifoat mkfifo FDCWD EACCESS dereferenziazione rmdir REMOVEDIR -% LocalWords: epoll +% LocalWords: epoll lsattr chattr FIOQSIZE %%% Local Variables: %%% mode: latex -- 2.30.2