From ac1d90df40f4ef778400d519610a1ed242db00a8 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 10 Jul 2001 20:50:15 +0000 Subject: [PATCH] Avanti coi tempi e le dimensioni dei file. --- filedir.tex | 74 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 12 deletions(-) diff --git a/filedir.tex b/filedir.tex index 1183d06..4c2f8d1 100644 --- a/filedir.tex +++ b/filedir.tex @@ -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} -- 2.30.2