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