Aggiunte quattro parole in cinque minuti di tempo libero
[gapil.git] / files.tex
index b7ad2fd1c208f11fb3955eefe4949a84b68911af..badd9edfd3d4bf9cd051c1ee4f82c7ed33b5770c 100644 (file)
--- a/files.tex
+++ b/files.tex
@@ -382,14 +382,13 @@ precedente: ovviamente perch
 componenti indicati come directory esistano e siano effettivamente directory,
 inoltre i permessi devono consentire l'accesso.
 
-
 Se il pathname comincia per \texttt{/} la ricerca parte dalla directory radice
-del processo che (a meno di un \textit{chroot} su cui torneremo in seguito) è
-la stessa per tutti i processi ed equivale alla radice dell'albero
-(\ref{sec:file_gen}): in questo caso si parla di un pathname
-\textsl{assoluto}. Altrimenti la ricerca parte dalla directory di lavoro
-corrente (\textit{current working directory}, su cui pure torneremo più avanti)
-ed il pathname è detto \textsl{relativo}.
+del processo che (a meno di un \textit{chroot} su cui torneremo in seguito,
+vedi \ref{sec:file_chroot}) è la stessa per tutti i processi ed equivale alla
+radice dell'albero (\ref{sec:file_gen}): in questo caso si parla di un
+pathname \textsl{assoluto}. Altrimenti la ricerca parte dalla directory
+corrente (su cui pure torneremo più avanti in \ref{sec:file_cwd}) ed il
+pathname è detto \textsl{relativo}.
 
 I componenti \texttt{.} e \texttt{..} hanno un significato speciale e vengono
 inseriti in ogni directory, il primo fa riferimento alla directory corrente e
@@ -404,6 +403,68 @@ C normalmente si mette in file con l'estensione .c, ma questa 
 convenzione.
 
 
+\section{L'interfaccia al filesystem}
+\label{sec:file_filesys_interf}
+
+Prima di entrare nei dettagli della manipolazione del contenuto dei file
+esamineremo le funzioni utilizzate per operare sui file piuttosto che sul loro
+contenuto. Le funzioni che esamineremo in questa sezione pertanto sono quelle
+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
+  working directory}) che è quella a cui si fa riferimento quando un filename
+è espresso in forma relativa (relativa appunto a questa directory).
+
+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, 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}
+
+
+
+\section{L'input/output di basso livello}
+\label{sec:file_lowlev_io}
+%
+% Questa va per ultima. Va bene che e` la più usata, ma è basata sulle altre
+%
 \section{I file stream}
 \label{sec:file_stream}
 
@@ -413,12 +474,35 @@ operazioni connesse all'uso dei file. L'interfaccia 
 l'header file \texttt{stdio.h}.
 
 Per ragioni storiche la struttura di dati che rappresenta un stream è stata
-chiamata \texttt{FILE}, dato che le funzioni di libreria usano sempre come
-parametri oggetti di tipo \texttt{FILE *} alle volte si usa il termine
-puntatore a file come sinonimo di stream. 
-
-
-
+chiamata \texttt{FILE}, questi oggetti sono creati dalle funzioni di libreria
+e contengono tutte le informazioni necessarie a gestire le operazioni sugli
+stream, come la posizione corrente, lo stato del buffer e degli indicatori di
+stato e di fine del file. Per questo motivo gli utenti non devono mai
+utilizzare direttamente o allocare queste strutture, ma usare sempre puntatori
+del tipo \texttt{FILE *} (tanto che in certi caso il termine di puntatore a
+file è diventato sinonimo di stream). 
+
+\subsection{Gli stream standard}
+\label{sec:file_stream_std}
+
+Quando un programma viene lanciato il processo ha sempre tre stream
+predefiniti aperti, che rappresentano i canali standard di input/output
+prestabiliti per il processo; anche questi tre stream sono definiti
+nell'header \texttt{stdio.h} e sono:
+
+\begin{itemize}
+\item \texttt{FILE * stdin} Lo \textit{standard input} cioè lo stream da cui
+  il processo riceve ordinariamente i dati in ingresso. Normalmente è associato
+  dalla shell all'input del terminale e prende i caratteri dalla tastiera.
+\item \texttt{FILE * stdout} Lo \textit{standard input} cioè lo stream su cui
+  il processo invia ordinariamente i dati in uscita. Normalmente è associato
+  dalla shell all'output del terminale e scrive sullo schermo.
+\item \texttt{FILE * stderr} Lo \textit{standard input} cioè lo stream su cui
+  il processo è supposto inviare i messaaggi di errore. Normalmente anch'esso
+  è associato dalla shell all'output del terminale e scrive sullo schermo.
+\end{itemize}
+
+In linux 
 
 
 %La struttura fondamentale che contiene i dati essenziali relativi ai file è il