compeltate ioctl e fcntl, si passa a ... boh
authorSimone Piccardi <piccardi@gnulinux.it>
Fri, 16 Nov 2001 21:34:11 +0000 (21:34 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Fri, 16 Nov 2001 21:34:11 +0000 (21:34 +0000)
fileadv.tex
fileunix.tex

index 9d084a86285ba36c4018a419088209987e2172cd..6f192eeb0404574d31d2a2cac59e0c3bc629a11a 100644 (file)
@@ -3,7 +3,6 @@
 
 
 
-
 \section{I/O non bloccante}
 \label{sec:file_noblocking}
 
index 4343a898bbeb31017506243f08970c2fbb6e8326..f53b821865556037e669af20d5eb5bfefeeabdea 100644 (file)
@@ -860,7 +860,7 @@ file descriptor viene usata la funzione \func{fcntl} il cui prototipo 
   \headdecl{fcntl.h}
   \funcdecl{int fcntl(int fd, int cmd)}
   \funcdecl{int fcntl(int fd, int cmd, long arg)}
-  \funcdecl{int fcntl(int fd, int cmd, struct flock *lock)}
+  \funcdecl{int fcntl(int fd, int cmd, struct flock * lock)}
   La funzione esegue una delle possibili operazioni specificate da \param{cmd}
   sul file \param{fd}.
   
@@ -897,33 +897,60 @@ 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}]
+\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 setta 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 setta \var{errno} a \macro{EACCES} o
+  \macro{EAGAIN} (per i dettagli sul \textit{file locking} vedi
+  \secref{sec:file_locking}).
+\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 setta
+  \var{errno} a \macro{EINTR} (per i dettagli sul \textit{file locking} vedi
+  \secref{sec:file_locking}).
+\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
+  process group è restituito come valore negativo.
+\item[\macro{F\_SETOWN}] setta il processo o process group che riceverà i
+  sengali \macro{SIGIO} e \macro{SIGURG} per gli eventi associati al file
+  descriptor \var{fd}.  I process group sono settati usando valori negativi.
+\item[\macro{F\_GETSIG}] restituisce il segnale mandato quando ci sono dati
+  disponibili in input sul file descriptor. Il valore 0 indica il default (che
+  è \macro{SIGIO}), un valore diverso da zero indica il segnale richiesto,
+  (che può essere lo stesso \macro{SIGIO}), nel qual caso al manipolatore del
+  segnale, se installato con \macro{SA\_SIGINFO}, vengono rese disponibili
+  informazioni ulteriori informazioni.
+\item[\macro{F\_SETSIG}] setta il segnale da inviare quando diventa possibile
+  effettuare I/O sul file descriptor. Il valore zero indica il default
+  (\macro{SIGIO}), ogni altro valore permette di rendere disponibile al
+  manipolatore del segnale ulteriori informazioni se si è usata
+  \macro{SA\_SIGINFO}.
 \end{basedescript}
 
+La maggior parte delle funzionalità di \func{fcntl} sono troppo avanzate per
+poter essere affrontate in dettaglio a questo punto; saranno riprese più
+avanti quando affronteremo le problematiche ad esse relative.
+
 
 \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
-è:
+interagire con le stesse funzioni usate per i normali file di dati,
+esisteranno sempre caratteristiche peculiari, specifiche dell'hardware e della
+funzionalità che ciascuno di essi 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 l'architettura del sistema ha previsto l'esistenza di una
+funzione speciale, \func{ioctl}, con cui poter compiere operazioni specifiche
+per ogni singolo dispositivo.  Il prototipo di questa funzione è:
 
 \begin{prototype}{sys/ioctl.h}{int ioctl(int fd, int request, ...)}
   
@@ -933,16 +960,20 @@ per essere effettuato attraverso \func{ioctl}; il prototipo di questa funzione
   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:
+  però il valore di ritorno per restituire informazoni. In caso di errore
+  viene sempre restituito -1 e \var{errno} viene settata ad uno dei valori
+  seguenti:
   \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}
+  ed inoltre \macro{EBADF} e \macro{EFAULT}.
 \end{prototype}
 
-
+La funzione serve in sostanza per fare tutte quelle operazioni che non si
+adattano all'architettura di I/O di unix e che non è possibile effettuare con
+le funzioni esaminate finora. Per questo motivo non è possibile fare altro che
+una descrizione generica; torneremo ad esaminarla in seguito, quando si
+tratterà di applicarla ad alcune problematiche specifiche.