Aggiunte tre righe fra gli sfottimenti circostanti
[gapil.git] / files.tex
index d116627122df87dacaae05ad5422c3f37809774c..8a1af4dcb38e703eac18004aef01ee7cc0d017c5 100644 (file)
--- a/files.tex
+++ b/files.tex
@@ -413,6 +413,7 @@ che permettono di esaminare e modificare le directory, rinominare o cancellare
 i file, esaminare o settare i loro attributi.
 
 \subsection{La directory di lavoro}
+\label{sec:file_dir_cvd}
 
 Come accennato ciascun processo è associato ad una directory nel filesystem
 che è chiamata directory corrente o directory di lavoro (\textit{current
@@ -421,8 +422,61 @@ che 
 
 Quando un utente effettua il login questa directory viene settata alla
 cosiddetta \textit{home directory} del suo account, il comando \texttt{cd}
-della shell consente di cambiarla a piacere. La directory corrente inoltre
-viene conservata nella creazione di un nuovo processo tramite la funzione fork (\ref{sec:proc_fork})
+della shell consente di cambiarla a piacere, spostandosi da una directory ad
+un'altra.  Siccome la directory corrente resta la stessa quando viene creato
+un processo figlio, la directory corrente della shell diventa anche la
+directory corrente di qualunque comando da essa lanciato.
+
+Le funzioni qui descritte servono esaminare e cambiare la directory di lavoro
+corrente. I prototipi di queste funzioni sono dichiarati in
+\texttt{unistd.h}. 
+
+\begin{itemize}
+\item \texttt{char * getcwd (char * buffer, size_t size)}
+  
+  Restituisce il filename completo della directory di lavoro corrente nella
+  stringa puntata da \texttt{buffer}, che deve essere precedentemente
+  allocata, per una dimensione massima di \texttt{size}. Si può anche
+  specificare un puntatore nullo come \texiti{buffer}, nel qual caso la
+  stringa sarà allocata automaticamente per una dimensione pari a
+  \texttt{size} qualora questa sia diversa da zero, o della lunghezza esatta
+  del pathname altrimenti. In questo caso si deve ricordare di disallocara la
+  stringa una volta cessato il suo utilizzo.
+  
+  La funzione restituisce il puntatore \texttt{buffer} se riesce,
+  \texttt{NULL} se fallisce, in quest'ultimo caso sono ritornate le seguenti
+  condizioni di errore:
+
+  \begin{itemize}
+  \item \texttt{EINVAL} L'argomento \texttt{size} è zero e \texttt{buffer} non
+    è nullo.
+  \item \texttt{ERANGE} L'argomento \texttt{size} è più piccolo della
+    lunghezza del pathname. 
+  \item \texttt{EACCES} Manca il permesso di lettura o di ricerca su uno dei
+    componenti del pathname (cioè su una delle directory superiori alla
+    corrente).
+  \end{itemize}
+\end{itemize}
+
+Di questa funzione esiste una versione \texttt{char * getwd(char * buffer)}
+fatta per compatibilità ll'indietro con BSD, che non consente di specificare
+la dimensione del buffer; esso deve essere allocato in precedenza ed avere una
+dimensione superiore a \texttt{PATH_MAX} (di solito 256 byters, vedi
+\ref{sec:xxxx_limits}; il problema è che in linux non esiste una dimensione
+superiore per un pathname, per cui noe è detto che il buffer sia sufficiente a
+contenere il nome del file, e questa è la ragione principale per cui questa
+funzione è deprecata.
+
+\item \texttt{int chdir (const char * pathname)}
+  
+  Come dice il nome (che significa \textit{change directory}, come l'omonimo
+  comando di shell) questa funzione serve a cambiare la directory di lavoro a
+  quella speficata dal pathname contenuto nella stringa \texttt{pathname}.
+
+  La funzione restituisce zero in caso di successo e -1 per un errore, 
+\end{itemize}
+
 
 
 \section{L'input/output di basso livello}