Avanti coi tempi e le dimensioni dei file.
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 10 Jul 2001 20:50:15 +0000 (20:50 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 10 Jul 2001 20:50:15 +0000 (20:50 +0000)
filedir.tex

index 1183d0696f34419062c076b49c8c4e92e9e00f65..4c2f8d147272f58edbbe6f455b4408bfb2cebb30 100644 (file)
@@ -310,9 +310,6 @@ questa funzione 
   \end{errlist}
 \end{prototype}
 
-\section{La manipolazione delle directories}
-\label{sec:filedir_dir_handling}
-
 \subsection{Le funzioni \texttt{mkdir} e \texttt{rmdir}} 
 \label{sec:filedir_dir_creat_rem}
 
@@ -435,7 +432,7 @@ per cambiare directory di lavoro.
   
 \begin{prototype}{unistd.h}{int fchdir (int filedes)} 
   Analoga alla precedente, ma usa un file descriptor invece del pathname.
-  
+
   Entrambe le funzioni restituiscono zero in caso di successo e -1 per un
   errore, in caso di errore \texttt{errno} viene settata secondo i codici di
   errore standard di accesso ai files (trattati in dettaglio in
@@ -461,7 +458,7 @@ manipolazione sar
 \label{sec:filedir_stat}
 
 La lettura delle informazioni relative ai file è fatta attraverso la famiglia
-delle funzioni \texttt{stat}, che è la funzione che il comando \texttt{ls} usa
+delle funzioni \func{stat}, che è la funzione che il comando \cmd{ls} usa
 per poter stampare tutti i dati dei files. I prototipi di queste funzioni sono
 i seguenti:
 \begin{functions}
@@ -484,22 +481,22 @@ i seguenti:
   Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
   caso di errore \texttt{errno} viene settato ai valori:
   \begin{errlist}
-  \item \texttt{EACCESS} Non c'è il permesso di accedere al file.
-  \item \texttt{ENOTDIR} Una componente del pathname non è una directory.
-  \item \texttt{EMLOOP} Ci sono troppi link simbolici nel pathname.
-  \item \texttt{EFAULT} I puntatori usati sono fuori dallo spazio di indirizzi
+  \item \texttt{EACCESS} non c'è il permesso di accedere al file.
+  \item \texttt{ENOTDIR} una componente del pathname non è una directory.
+  \item \texttt{EMLOOP} ci sono troppi link simbolici nel pathname.
+  \item \texttt{EFAULT} i puntatori usati sono fuori dallo spazio di indirizzi
     del processo.
   \item \texttt{ENOMEM} il kernel non ha a disposizione memoria sufficiente a
     completare l'operazione. 
-  \item \texttt{ENAMETOOLONG} Il filename è troppo lungo.
+  \item \texttt{ENAMETOOLONG} il filename è troppo lungo.
   \end{errlist}
 \end{functions}
 
 La struttura \texttt{stat} è definita nell'header \texttt{sys/stat.h} e in
 generale dipende dall'implementazione, la versione usata da Linux è mostrata
 in \nfig, così come riportata dalla man page (in realtà la definizione
-effettivamente usata nel kernel dipende dall'archietettura e ha altri campi
-riservati per estensioni come tempo più precisi, o per il padding dei campi).
+effettivamente usata nel kernel dipende dall'architettura e ha altri campi
+riservati per estensioni come tempi più precisi, o per il padding dei campi).
 
 \begin{figure}[!htb]
   \footnotesize
@@ -641,9 +638,62 @@ parti non scritte vengono restituiti degli zeri, si avr
 di \cmd{ls}.
 
 
+Se è sempre possibile allargare un file scrivendoci sopra od usando la
+funzione \func{seek} per spostarsi oltre la sua fine. Esistono però anche casi
+in cui si può avere bisogno di effettuare un troncamento scartando i dati al
+di là della dimensione scelta come nuova fine del file.
+
+Un file può essere troncato a zero aprendolo con il flag \macro{O\_TRUNC}, ma
+questo è un caso particolare; per qualunque altra dimensione si possono usare
+le due funzioni:
+\begin{functions}
+  \headdecl{unistd.h} \funcdecl{int truncate(const char *file\_name, off_t
+    length)} Fa si che la dimensione del file \var{file\_name} sia troncata ad
+    un valore massimo specificato da \var{lenght}. 
+  
+  \funcdecl{int ftruncate(int fd, off_t length))} Identica a \func{truncate}
+  eccetto che si usa con un file aperto, specificato tramite il suo file
+  descriptor \var{fd}, 
+  
+  Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
+  caso di errore \texttt{errno} viene settato ai valori:
+  \begin{errlist}
+  \item \texttt{EACCESS} non c'è il permesso di accedere al file.
+  \item \texttt{ENOTDIR} una componente del pathname non è una directory.
+  \item \texttt{EMLOOP} ci sono troppi link simbolici nel pathname.
+  \item \texttt{EFAULT} i puntatori usati sono fuori dallo spazio di indirizzi
+    del processo.
+  \item \texttt{ENOMEM} il kernel non ha a disposizione memoria sufficiente a
+    completare l'operazione. 
+  \item \texttt{ENOENT} il file non esiste. 
+  \item \texttt{ENAMETOOLONG} il filename è troppo lungo.
+  \end{errlist}
+\end{functions}
+
+Se il file è più lungo della lunghezza specificata i dati in eccesso saranno
+perduti; il comportamento in caso di lunghezza inferiore non è specificato e
+dipende dall'implementazione, il file può essere lasciato invariato o esteso
+fino alla lunghezza scelta; in quest'ultimo caso lo spazio viene riempito con
+zeri (e in genere si ha la creazione di un hole nel file).
+
 \subsection{I tempi dei file}
 \label{sec:filedir_file_times}
 
+Il sistema mantiene tre tempi per ciascun file, corrispondenti a tre campi
+della struttura \func{stat}, come riassunto in \ntab:
+
+\begin{table}[htb]
+  \centering
+  \begin{tabular}[c]{|c|l|l|c|}
+    \var{st\_atime} & & &   \\ 
+    \var{st\_mtime} & & &   \\ 
+    \var{st\_ctime} & & &   \\ 
+  \end{tabular}
+  \caption{I tre tempi associati a ciascun file}
+  \label{tab:filedir_file_times}
+\end{table}
+
+
 \subsection{La funzione \texttt{utime}}
 \label{sec:filedir_utime}