Modifiche di ieri sera.
authorSimone Piccardi <piccardi@gnulinux.it>
Fri, 4 May 2007 06:31:10 +0000 (06:31 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Fri, 4 May 2007 06:31:10 +0000 (06:31 +0000)
fileadv.tex
listati/inotify_event.h [new file with mode: 0644]
sources/TCP_countd.c

index 4737913a90046c33e7d9df43791a2242ebbaa9e9..58aced40516a754aac668f9960ab69c826ddec85 100644 (file)
@@ -756,7 +756,7 @@ Per risolvere questo problema 
 chiamata \textit{dnotify}, che consente di richiedere una notifica quando una
 directory, o di uno qualunque dei file in essa contenuti, viene modificato.
 Come per i \textit{file lease} la notifica avviene di default attraverso il
-segnale \const{SIGIO}, ma se ne può utilizzare un altro. inoltre si potrà
+segnale \const{SIGIO}, ma se ne può utilizzare un altro. Inoltre si potrà
 ottenere nel gestore del segnale il file descriptor che è stato modificato
 tramite il contenuto della struttura \struct{siginfo\_t}.
 
@@ -858,7 +858,7 @@ nessun file, ma che viene utilizzato per notificare gli eventi che si sono
 posti in osservazione all'applicazione che usa l'interfaccia di
 \textit{inotify}. 
 
-Trattandosi di file descriptor a tutti gli effetti, esso potrà essere
+Trattandosi di un file descriptor a tutti gli effetti, esso potrà essere
 utilizzato con le funzioni \func{select} e \func{poll}. Dato che gli eventi
 vengono notificati come dati disponibili in lettura sul file descriptor
 stesso, dette funzioni ritorneranno tutte le volte che si avrà un evento di
@@ -868,12 +868,14 @@ associati ai socket (vedi sez.~\ref{sec:sock_ioctl_IP}) si potr
 numero di byte disponibili in lettura eseguendo su di esso l'operazione
 \const{FIONREAD} con \func{ioctl}.
 
-Una volta creata la coda di notifica, ed ottenuto il relativo file descriptor,
-l'interfaccia prevede che si definiscano gli eventi da tenere sotto
-osservazione associando ad esso una \textsl{lista di osservazione} (o
-\textit{watch list}) che indica quali file e directory tenere d'occhio. Per
-gestire la lista di osservazione l'interfaccia fornisce due funzioni, la prima
-di queste è \funcd{inotify\_add\_watch}, il cui prototipo è:
+L'interfaccia di \textit{inotify} consente di mettere sotto osservazione sia
+singoli file, che intere directory; in quest'ultimo caso l'interfaccia
+restituirà informazioni sia riguardo alla directory che ai file che essa
+contiene.  Una volta creata la coda di notifica si devono definire gli eventi
+da tenere sotto osservazione; questo viene fatto tramite una \textsl{lista di
+  osservazione} (o \textit{watch list}) associata alla coda. Per gestire la
+lista di osservazione l'interfaccia fornisce due funzioni, la prima di queste
+è \funcd{inotify\_add\_watch}, il cui prototipo è:
 \begin{prototype}{sys/inotify.h}
   {int inotify\_add\_watch(int fd, const char *pathname, uint32\_t mask)}
 
@@ -892,38 +894,48 @@ di queste 
 \end{prototype}
 
 La funzione consente di creare un \textsl{evento di osservazione} (un
-cosiddetto ``\textit{watch}'') nella lista di osservazione di una coda di
-notifica. Quest'ultima viene identificata specificando il file descriptor ad
-essa associato nell'argomento \param{fd}. Il file da porre sotto osservazione
-viene invece identificato tramite il suo pathname passato nell'argomento
-\param{pathname}, infine il terzo argomento, \param{mask}, è una maschera
-binaria che consente di specificare quali tipologie di eventi accaduti sul
-file devono essere osservati, e deve essere specificato con una OR aritmetico
-delle costanti riportate in tab.~\ref{tab:inotify_event_watch}.
-
+cosiddetto ``\textit{watch}'') nella lista di una coda di notifica, indicata
+specificando il file descriptor ad essa associato nell'argomento \param{fd}.
+Il file o la directory da porre sotto osservazione viene invece indicati per
+nome, passato nell'argomento \param{pathname}. Infine il terzo argomento,
+indica quali eventi devono essere tenuti sotto osservazione; questo deve
+essere specificato come maschera binaria combinando i valori delle costanti
+riportate in tab.~\ref{tab:inotify_event_watch}; in essa si sono marcati con
+un ``$\bullet$'' gli eventi che, quando specificati per una directory, vengono
+osservati anche su tutti i file che essa contiene.
 
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|p{8cm}|}
+  \begin{tabular}[c]{|l|c|p{10cm}|}
     \hline
-    \textbf{Valore}  & \textbf{Significato} \\
+    \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
-    \const{}& .\\ 
+    \const{IN\_ACCESS}        &$\bullet$& c'è stato accesso al file in
+                                          lettura.\\  
+    \const{IN\_ATTRIB}        &$\bullet$& ci sono stati cambiamenti sui dati
+                                          dell'inode.\\ 
+    \const{IN\_CLOSE\_WRITE}  &$\bullet$& è stato chiuso un file aperto in
+                                          scrittura.\\  
+    \const{IN\_CLOSE\_NOWRITE}&$\bullet$& è stato chiuso un file aperto in
+                                          sola lettura.\\ 
+    \const{IN\_CREATE}        &$\bullet$& è stato creato un file o una
+                                          directory in una directory sotto
+                                          osservazione.\\  
+    \const{IN\_DELETE}        &$\bullet$& è stato cancellato un file o una
+                                          directory in una directory sotto
+                                          osservazione.\\ 
+    \const{IN\_DELETE\_SELF}  &       &   è stato cancellato il file (o la
+                                          directory) sotto osservazione.\\ 
+    \const{IN\_MODIFY}        &$\bullet$& è stato modificato il file.\\ 
+    \const{IN\_MOVE\_SELF}    &         & è stato rinominato il file (o la
+                                          directory) sotto osservazione.\\ 
+    \const{IN\_MOVED\_FROM}   &$\bullet$& un file è stato spostato fuori dalla
+                                          directory sotto osservazione.\\ 
+    \const{IN\_MOVED\_TO}     &$\bullet$& un file è stato spostato nella
+                                          directory sotto osservazione.\\ 
+    \const{IN\_OPEN}          &$\bullet$& un file è stato aperto.\\ 
     \hline    
   \end{tabular}
   \caption{Le costanti che identificano i valori per la maschera binaria
@@ -931,15 +943,14 @@ delle costanti riportate in tab.~\ref{tab:inotify_event_watch}.
   \label{tab:inotify_event_watch}
 \end{table}
 
-
-Dato che può esistere un solo \textit{watch} per file, qualora venga
-specificato il pathname di un file che era già stato posto in osservazione, la
-funzione sovrascriverà le impostazioni precedenti. In caso di successo la
-funzione ritorna un intero positivo, detto \textit{watch descriptor} che
-identifica univocamente l'evento di osservazione. Questo valore è importante
-perché è soltanto con esso che si può rimuovere un evento di osservazione,
-usando la seconda funzione dell'interfaccia di gestione,
-\funcd{inotify\_rm\_watch}, il cui prototito è:
+Se non esiste nessun \textit{watch} per il file (o la directory) specificata
+questo verrà creato per gli eventi specificati dall'argomento \param{mask},
+altrimenti la funzione sovrascriverà le impostazioni precedenti. In caso di
+successo la funzione ritorna un intero positivo, detto \textit{watch
+  descriptor} che identifica univocamente l'evento di osservazione. Questo
+valore è importante perché è soltanto con esso che si può rimuovere un evento
+di osservazione, usando la seconda funzione dell'interfaccia di gestione,
+\funcd{inotify\_rm\_watch}, il cui prototipo è:
 \begin{prototype}{sys/inotify.h}
   {int inotify\_rm\_watch(int fd, uint32\_t wd)}
 
@@ -956,6 +967,21 @@ usando la seconda funzione dell'interfaccia di gestione,
 }
 \end{prototype}
 
+Oltre che per la rimozione, il \textit{watch descriptor} viene usato anche per
+identificare l'evento a cui si fa riferimento nella lista dei risultati
+restituiti da \textit{inotify}
+
+
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15cm}
+    \includestruct{listati/inotify_event.h}
+  \end{minipage} 
+  \normalsize 
+  \caption{La struttura \structd{inotify\_event}.}
+  \label{fig:inotify_event}
+\end{figure}
 
 
 
diff --git a/listati/inotify_event.h b/listati/inotify_event.h
new file mode 100644 (file)
index 0000000..c10185a
--- /dev/null
@@ -0,0 +1,8 @@
+struct inotify_event {
+    int      wd;       /* Watch descriptor */
+    uint32_t mask;     /* Mask of events */
+    uint32_t cookie;   /* Unique cookie associating related
+                          events (for rename(2)) */
+    uint32_t len;      /* Size of 'name' field */
+    char     name[];   /* Optional null-terminated name */
+};
index 1cdfbf10c83080230b0675ad47238b952b98283c..43082c03809dade4ae381e5a7e0e00ae3dc72bcd 100644 (file)
 /****************************************************************
  *
  * Program countd: Elementary TCP server for teaching purpose, count
- * number of request to the server itself
+ * number of request to the server itself, use POSIX semaphores and
+ * shared memory
  *
  * Author: Simone Piccardi
  * Feb. 2007
  *
- * Usage: countdd -h give all info
+ * Usage: countd -h give all info
  *
  ****************************************************************/
 /* 
@@ -203,7 +204,7 @@ int main(int argc, char *argv[])
 void usage(void) {
     printf("A counter server\n");
     printf("Usage:\n");
-    printf("  echod [-h] \n");
+    printf("  countd [-h] \n");
     printf("  -h          print this help\n");
     printf("  -d          write debug info\n");
     printf("  -k          enable SO_KEEPALIVE\n");