X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=b90371d12638692cdb3339204181f01921ce92a4;hp=b5a19109890e7f5ca02842cd6f89462e9f7c1583;hb=520fa6e7cd289a93a0955f3f91848ebd5b424250;hpb=a051e3c3d3b403ee210274d8c2ec7d756c531a21 diff --git a/filedir.tex b/filedir.tex index b5a1910..b90371d 100644 --- a/filedir.tex +++ b/filedir.tex @@ -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 -#include -#include /* directory */ -#include /* C standard library */ -#include - -/* 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 -#include -#include /* directory */ -#include /* C standard library */ -#include - -/* - * 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