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
 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}.
 
 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}. 
 
 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
 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}.
 
 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)}
 
 \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
 \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{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|p{8cm}|}
+  \begin{tabular}[c]{|l|c|p{10cm}|}
     \hline
     \hline
-    \textbf{Valore}  & \textbf{Significato} \\
+    \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
     \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
     \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}
 
   \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)}
 
 \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}
 
 }
 \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
 /****************************************************************
  *
  * 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
  *
  *
  * 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");
 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");
     printf("  -h          print this help\n");
     printf("  -d          write debug info\n");
     printf("  -k          enable SO_KEEPALIVE\n");