X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=4343a898bbeb31017506243f08970c2fbb6e8326;hp=3e1915af22d851a6259e146e7e57b37327fe0f81;hb=9bb386c5f4f4eee3a522e62e0138fffe574bf7c2;hpb=90d696f5005a8ce307042cb6aabfff8335747380 diff --git a/fileunix.tex b/fileunix.tex index 3e1915a..4343a89 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -874,7 +874,8 @@ file descriptor viene usata la funzione \func{fcntl} il cui prototipo Il comportamento di questa funzione è determinato dal valore del comando \param{cmd} che le viene fornito; in \secref{sec:file_dup} abbiamo incontrato -un esempio, una lista dei possibili valori è riportata di seguito: +un esempio per la duplicazione dei file descriptor, una lista dei possibili +valori è riportata di seguito: \begin{basedescript}{\desclabelwidth{2.0cm}} \item[\macro{F\_DUPFD}] trova il primo file descriptor disponibile di valore maggiore o uguale ad \param{arg} e ne fa una copia di \var{fd}. In caso di @@ -896,9 +897,52 @@ un esempio, una lista dei possibili valori \item[\macro{F\_SETFL}] setta il \textit{file status flag} al valore specificato da \param{arg}, possono essere settati solo i bit riportati nella terza sezione di \tabref{tab:file_open_flags} (da verificare). +\item[\macro{F\_GETLK}] +\item[\macro{F\_SETLK}] +\item[\macro{F\_SETLKW}] +\item[\macro{F\_GETOWN}] +\item[\macro{F\_SETOWN}] +\item[\macro{F\_GETSIG}] +\item[\macro{F\_SETSIG}] \end{basedescript} \subsection{La funzione \func{ioctl}} \label{sec:file_ioctl} +Benché il concetto di \textit{everything is a file} si sia dimostratato molto +valido anche per l'interazione con i più vari dispositivi, con cui si può +interagire con le stesse funzioni usate per i normali file di dati, ognuno di +essi avrà poi delle caratteristiche peculiari, specifiche dell'hardware e +della funzionalità che provvede, che non possono venire comprese in questa +interfaccia astratta (un caso tipico è il settaggio della velocità di una +porta seriale, o le dimensioni di un framebuffer). + +Per questo motivo fin dall'inizio è sempre stata previsto l'uso della funzione +\func{ioctl} come un \textit{coltellino svizzero} con cui poter compiere tutte +le operazioni specifiche e particolari di ogni singolo dispositivo. Tutto +quello che non è possibile effettuare con le funzioni finora esaminate finisce +per essere effettuato attraverso \func{ioctl}; il prototipo di questa funzione +è: + +\begin{prototype}{sys/ioctl.h}{int ioctl(int fd, int request, ...)} + + La funzione manipola il sottostante dispositivo, usando il parametro + \param{request} per specificare l'operazione richiesta e il terzo parametro + (che usualmente è di tipo \param{char * argp}) per passare o ricevere + l'informazione necessaria al dispositivo. + + La funzione nella maggior parte dei casi ritorna 0, alcune operazioni usano + però il valore di ritorno per in caso di successo e -1 + in caso di errore, nel qual caso \var{errno} viene settata ad uno dei + valori: + \begin{errlist} + \item \macro{ENOTTY} il file \param{fd} non è associato con un device. + \item \macro{EINVAL} gli argomenti \param{request} o \param{argp} non sono + validi. + \end{errlist} + ed inoltre \macro{EBADF}, +\end{prototype} + + +