\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
\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}
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}
\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
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.
\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