Iniziato a scrivere qualcosa sui socket UDP, e fatta una figura.
[gapil.git] / filedir.tex
index b5a19109890e7f5ca02842cd6f89462e9f7c1583..6a9befc0648ffcf2086c40f001b51ab85efe88cf 100644 (file)
@@ -1,6 +1,6 @@
 %% filedir.tex
 %%
-%% Copyright (C) 2000-2002 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2003 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Prefazione",
@@ -787,15 +787,7 @@ inode cui il file 
 \begin{figure}[!htb]
   \footnotesize \centering
   \begin{minipage}[c]{15cm}
-    \begin{lstlisting}[stepnumber=0]{}
-struct dirent {
-    ino_t d_ino;                    /* inode number */
-    off_t d_off;                    /* offset to the next dirent */
-    unsigned short int d_reclen;    /* length of this record */
-    unsigned char d_type;           /* type of file */
-    char d_name[256];               /* We must not include limits.h! */
-};
-    \end{lstlisting}
+    \includestruct{listati/dirent.c}
   \end{minipage} 
   \normalsize 
   \caption{La struttura \structd{dirent} per la lettura delle informazioni dei 
@@ -964,39 +956,10 @@ la relativa dimensione (in sostanza una versione semplificata del comando
 \cmd{ls}).
 
 \begin{figure}[!htb]
-  \footnotesize
-  \begin{lstlisting}{}
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>        /* directory */
-#include <stdlib.h>        /* C standard library */
-#include <unistd.h>
-
-/* computation function for DirScan */
-int do_ls(struct dirent * direntry);
-/* main body */
-int main(int argc, char *argv[]) 
-{
-    ...
-    if ((argc - optind) != 1) {          /* There must be remaing parameters */
-        printf("Wrong number of arguments %d\n", argc - optind);
-        usage();
-    }
-    DirScan(argv[1], do_ls);
-    exit(0);
-}
-/*
- * Routine to print file name and size inside DirScan
- */
-int do_ls(struct dirent * direntry) 
-{
-    struct stat data;
-
-    stat(direntry->d_name, &data);                          /* get stat data */
-    printf("File: %s \t size: %d\n", direntry->d_name, data.st_size);
-    return 0;
-}
-  \end{lstlisting}
+  \footnotesize \centering
+  \begin{minipage}[c]{15.6cm}
+    \includecodesample{listati/my_ls.c}
+  \end{minipage}
   \caption{Esempio di codice per eseguire la lista dei file contenuti in una
     directory.} 
   \label{fig:file_my_ls}
@@ -1025,43 +988,10 @@ delle relative dimensioni.  Si noti infine come si restituisca sempre 0 come
 valore di ritorno per indicare una esecuzione senza errori.
 
 \begin{figure}[!htb]
-  \footnotesize
-  \begin{lstlisting}{}
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>        /* directory */
-#include <stdlib.h>        /* C standard library */
-#include <unistd.h>
-
-/*
- * Function DirScan: 
- * 
- * Input:  the directory name and a computation function
- * Return: 0 if OK, -1 on errors
- */
-int DirScan(char * dirname, int(*compute)(struct dirent *)) 
-{
-    DIR * dir;
-    struct dirent *direntry;
-
-    if ( (dir = opendir(dirname)) == NULL) {               /* oper directory */
-        printf("Opening %s\n", dirname);          /* on error print messages */
-        perror("Cannot open directory");                  /* and then return */
-        return -1;
-    }
-    fd = dirfd(dir);                                  /* get file descriptor */
-    fchdir(fd);                                          /* change directory */
-    /* loop on directory entries */
-    while ( (direntry = readdir(dir)) != NULL) {               /* read entry */
-        if (compute(direntry)) {                   /* execute function on it */
-            return -1;                                    /* on error return */
-        }
-    }
-    closedir(dir);
-    return 0;
-}
-
-  \end{lstlisting}
+  \footnotesize \centering
+  \begin{minipage}[c]{15.6cm}
+    \includecodesample{listati/DirScan.c}
+  \end{minipage}
   \caption{Codice della routine di scansione di una directory contenuta nel
     file \file{DirScan.c}.} 
   \label{fig:file_dirscan}
@@ -1434,23 +1364,7 @@ riservati per estensioni come tempi pi
   \footnotesize
   \centering
   \begin{minipage}[c]{15cm}
-    \begin{lstlisting}[stepnumber=0]{}
-struct stat {
-    dev_t         st_dev;      /* device */
-    ino_t         st_ino;      /* inode */
-    mode_t        st_mode;     /* protection */
-    nlink_t       st_nlink;    /* number of hard links */
-    uid_t         st_uid;      /* user ID of owner */
-    gid_t         st_gid;      /* group ID of owner */
-    dev_t         st_rdev;     /* device type (if inode device) */
-    off_t         st_size;     /* total size, in bytes */
-    unsigned long st_blksize;  /* blocksize for filesystem I/O */
-    unsigned long st_blocks;   /* number of blocks allocated */
-    time_t        st_atime;    /* time of last access */
-    time_t        st_mtime;    /* time of last modification */
-    time_t        st_ctime;    /* time of last change */
-};
-    \end{lstlisting}
+    \includestruct{listati/stat.h}
   \end{minipage} 
   \normalsize 
   \caption{La struttura \structd{stat} per la lettura delle informazioni dei 
@@ -1555,9 +1469,7 @@ un'opportuna combinazione.
 Ad esempio se si volesse impostare una condizione che permetta di controllare
 se un file è una directory o un file ordinario si potrebbe definire la macro
 di preprocessore:
-\begin{lstlisting}[stepnumber=0,frame=]{}
-#define IS_FILE_DIR(x) (((x) & S_IFMT) & (S_IFDIR | S_IFREG))
-\end{lstlisting}
+\includecodesnip{listati/is_file_dir.h}
 in cui prima si estraggono da \var{st\_mode} i bit relativi al tipo di file e
 poi si effettua il confronto con la combinazione di tipi scelta.
 
@@ -1808,12 +1720,7 @@ valori che si vogliono impostare per tempi.
 \begin{figure}[!htb]
   \footnotesize \centering
   \begin{minipage}[c]{15cm}
-    \begin{lstlisting}[stepnumber=0]{}
-struct utimbuf {
-        time_t actime;  /* access time */
-        time_t modtime; /* modification time */
-};
-    \end{lstlisting}
+    \includestruct{listati/utimbuf.h}
   \end{minipage} 
   \normalsize 
   \caption{La struttura \structd{utimbuf}, usata da \func{utime} per modificare
@@ -2521,13 +2428,13 @@ alcun effetto qualora il processo possieda i privilegi di amministratore.
     -&1&-&-&-&0&-&-&-&-&-&-&Il \textit{mandatory locking} è abilitato\\
     -&-&1&-&-&-&-&-&-&-&-&-&Non utilizzato\\
     -&-&-&1&-&-&-&-&-&-&-&-&Permesso di lettura per il proprietario\\
-    -&-&-&-&1&-&-&-&-&-&-&-&Permesso di lettura per il gruppo proprietario\\
-    -&-&-&-&-&1&-&-&-&-&-&-&Permesso di lettura per tutti gli altri\\
-    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di scrittura per il proprietario\\
+    -&-&-&-&1&-&-&-&-&-&-&-&Permesso di scrittura per il proprietario\\
+    -&-&-&-&-&1&-&-&-&-&-&-&Permesso di esecuzione per il proprietario\\
+    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di lettura per il gruppo proprietario\\
     -&-&-&-&-&-&-&1&-&-&-&-&Permesso di scrittura per il gruppo proprietario\\
-    -&-&-&-&-&-&-&-&1&-&-&-&Permesso di scrittura per tutti gli altri \\
-    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di esecuzione per il proprietario\\
-    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di esecuzione per il gruppo proprietario\\
+    -&-&-&-&-&-&-&-&1&-&-&-&Permesso di esecuzione per il gruppo proprietario\\
+    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di lettura per tutti gli altri\\
+    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di scrittura per tutti gli altri \\
     -&-&-&-&-&-&-&-&-&-&-&1&Permesso di esecuzione per tutti gli altri\\
     \hline
   \end{tabular}
@@ -2563,13 +2470,13 @@ compatta illustrata in \figref{fig:file_perm_bit}.
     -&1&-&-&-&-&-&-&-&-&-&-&Propaga il gruppo proprietario ai nuovi file creati\\
     -&-&1&-&-&-&-&-&-&-&-&-&Limita l'accesso in scrittura dei file nella directory\\
     -&-&-&1&-&-&-&-&-&-&-&-&Permesso di visualizzazione per il proprietario\\
-    -&-&-&-&1&-&-&-&-&-&-&-&Permesso di visualizzazione per il gruppo proprietario\\
-    -&-&-&-&-&1&-&-&-&-&-&-&Permesso di visualizzazione per tutti gli altri\\
-    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di aggiornamento per il proprietario\\
+    -&-&-&-&1&-&-&-&-&-&-&-&Permesso di aggiornamento per il proprietario\\
+    -&-&-&-&-&1&-&-&-&-&-&-&Permesso di attraversamento per il proprietario\\
+    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di visualizzazione per il gruppo proprietario\\
     -&-&-&-&-&-&-&1&-&-&-&-&Permesso di aggiornamento per il gruppo proprietario\\
-    -&-&-&-&-&-&-&-&1&-&-&-&Permesso di aggiornamento per tutti gli altri \\
-    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di attraversamento per il proprietario\\
-    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di attraversamento per il gruppo proprietario\\
+    -&-&-&-&-&-&-&-&1&-&-&-&Permesso di attraversamento per il gruppo proprietario\\
+    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di visualizzazione per tutti gli altri\\
+    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di aggiornamento per tutti gli altri \\
     -&-&-&-&-&-&-&-&-&-&-&1&Permesso di attraversamento per tutti gli altri\\
     \hline
   \end{tabular}
@@ -2578,8 +2485,8 @@ compatta illustrata in \figref{fig:file_perm_bit}.
   \label{tab:file_dirperm_bits}
 \end{table}
 
-Nelle tabelle si è indicato con $-$ il fatto che il valore degli altri bit non
-è influente rispetto a quanto indicato in ciascuna riga; l'operazione fa
+Nelle tabelle si è indicato con ``-'' il fatto che il valore degli altri bit
+non è influente rispetto a quanto indicato in ciascuna riga; l'operazione fa
 riferimento soltanto alla combinazione di bit per i quali il valore è
 riportato esplicitamente.