Altre indicizzazioni, e inizio di readdir
authorSimone Piccardi <piccardi@gnulinux.it>
Thu, 26 Dec 2002 22:48:07 +0000 (22:48 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Thu, 26 Dec 2002 22:48:07 +0000 (22:48 +0000)
filedir.tex
filestd.tex
intro.tex
macro.tex
process.tex
system.tex

index 84b0194..5b3b0b5 100644 (file)
@@ -642,9 +642,11 @@ Per creare una fifo (un file speciale, su cui torneremo in dettaglio in
     \errval{EEXIST}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOSPC},
     \errval{ENOTDIR} e \errval{EROFS}.}
 \end{functions}
-\noindent come per \func{mknod} il file \param{pathname} non deve esistere
-(neanche come link simbolico); al solito i permessi specificati da
-\param{mode} vengono modificati dal valore di \var{umask}.
+
+La funzione crea la fifo \param{pathname} con i permessi \param{mode}. Come
+per \func{mknod} il file \param{pathname} non deve esistere (neanche come link
+simbolico); al solito i permessi specificati da \param{mode} vengono
+modificati dal valore di \var{umask}.
 
 
 
@@ -659,11 +661,11 @@ file usando le apposite funzioni. Pu
 contenuto di una directory, ad esempio per fare la lista dei file che contiene
 o per delle ricerche.
 
-Per far questo nello standard POSIX\footnote{le funzioni sono previste pure in
+Per far questo lo standard POSIX\footnote{le funzioni sono previste pure in
   BSD e SVID.} ha introdotto i cosiddetti \textit{directory streams} (chiamati
 così per l'analogia con i file stream di \capref{cha:files_std_interface}) ed
-alcune di funzioni per la loro gestione. La prima di queste è \funcd{opendir},
-che apre uno di questi stream, il suo prototipo è:
+una serie di funzioni per la loro gestione. La prima di queste è
+\funcd{opendir}, il cui prototipo è:
 \begin{functions}
   \headdecl{sys/types.h} \headdecl{dirent.h} 
   
@@ -678,13 +680,15 @@ che apre uno di questi stream, il suo prototipo 
 \end{functions}
 
 La funzione apre un \textit{directory stream} per la directory
-\param{dirname}, ritornando il puntatore alla relativa struttura \ctyp{DIR} da
-usare per le successive operazioni, si posiziona inoltre sulla prima voce
-della directory.
+\param{dirname}, ritornando il puntatore alla relativa struttura \type{DIR}
+(questo è un tipo opaco\index{tipo!opaco} usato dalle librerie per gestire i
+\textit{directory stream}) da usare per le successive operazioni, infine
+posiziona lo stream sulla prima voce contenuta nella directory.
 
 Dato che le directory sono comunque dei file, in alcuni casi può essere utile
-conoscere il file descriptor sottostante un \textit{directory stream}, ad
-esempio per utilizzarlo con la funzione \func{fchdir} per cambiare la
+conoscere il \textit{file descriptor} (tratteremo dei \textit{file descriptor}
+in \capref{cha:file_unix_interface}) sottostante un \textit{directory stream},
+ad esempio per utilizzarlo con la funzione \func{fchdir} per cambiare la
 directory di lavoro (vedi \secref{sec:file_work_dir}) a quella relativa allo
 stream che si è aperto. A questo scopo si può usare la funzione \funcd{dirfd},
 il cui prototipo è:
@@ -719,10 +723,14 @@ La lettura di una voce nella directory viene effettuata attraverso la funzione
     \var{errno} assumerà il valore \errval{EBADF}.}
 \end{functions}
 
-La funzione legge una voce dalla directory (una \textit{directory entry}, da
-distinguersi da quelle della cache di cui parlavamo in \secref{sec:file_vfs})
-in un'opportuna struttura \struct{dirent} definita in
-\figref{fig:file_dirent_struct}, il suo pro
+La funzione legge una voce dalla directory \textit{directory
+  entry},\footnote{anche questa viene chiamata anche se non ha nulla a che
+  fare con le omonime \textit{directory entry} di cui parlavamo in
+  \secref{sec:file_vfs}).} in un'opportuna struttura \struct{dirent}, la cui
+definizione è riportata in \figref{fig:file_dirent_struct}, che contiene i
+dati relativi al file cui la voce fa riferimento. Si tenga presente che la
+struttura viene sovrascritta tutte le volte che si ripete una lettura sullo
+stesso \textit{directory stream}.
 
 \begin{figure}[!htb]
   \footnotesize
index 5bf7cf4..8d6b55b 100644 (file)
@@ -81,14 +81,13 @@ 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 \ctyp{FILE
-  *} ottenuti dalla libreria stessa (tanto che in certi casi il termine
-di puntatore a file è diventato sinonimo di stream).  Tutte le funzioni
-della libreria che operano sui file accettano come parametri solo
-variabili di questo tipo, che diventa accessibile includendo l'header
-file \file{stdio.h}.
-
+Per questo motivo gli utenti non devono mai utilizzare direttamente o allocare
+queste strutture (che sono dei \textsl{tipi opachi}\index{tipo!opaco}) ma
+usare sempre puntatori del tipo \ctyp{FILE *} ottenuti dalla libreria stessa
+(tanto che in certi casi il termine di puntatore a file è diventato sinonimo
+di stream).  Tutte le funzioni della libreria che operano sui file accettano
+come parametri solo variabili di questo tipo, che diventa accessibile
+includendo l'header file \file{stdio.h}.
 
 
 \subsection{Gli stream standard}
index e349fe6..27a1d33 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -365,15 +365,19 @@ usare le varie estensioni al linguaggio e al preprocessore da esso supportate.
 Uno dei problemi di portabilità del codice più comune è quello dei tipi di
 dati utilizzati nei programmi, che spesso variano da sistema a sistema, o
 anche da una architettura ad un altra (ad esempio passando da macchine con
-processori 32 bit a 64).
-
-Storicamente alcuni tipi di dati definiti dallo standard ANSI C sono sempre
-stati associati ad alcune variabili nei sistemi Unix, ad esempio la posizione
-corrente all'interno di un file è sempre stato associato ad un intero a 32
-bit, mentre il numero di dispositivo è sempre stato associato ad un intero a
-16 bit. Tutto questo ovviamente costituisce un incubo per la portabilità tutte
-le volte che, con l'evolversi delle piattaforme hardware, alcuni di questi
-tipi si sono rivelati inadeguati, e se ne è dovuto cambiare la dimensione.
+processori 32 bit a 64). In particolare questo è vero nell'uso dei cosiddetti
+\textit{tipi elementari}\index{tipo!elementare} del linguaggio C (come
+\ctyp{int}) la cui dimensione varia a seconda dell'architettura hardware.
+
+Storicamente alcuni tipi nativi dello standard ANSI C sono sempre stati
+associati ad alcune variabili nei sistemi Unix, dando per scontata la
+dimensione. Ad esempio la posizione corrente all'interno di un file è sempre
+stata associata ad un intero a 32 bit, mentre il numero di dispositivo è
+sempre stato associato ad un intero a 16 bit. Storicamente questi erano
+definiti rispettivamente come \ctyp{int} e \ctyp{short}, ma tutte le volte
+che, con l'evolversi ed il mutare delle piattaforme hardware, alcuni di questi
+tipi si sono rivelati inadeguati o sono cambiati, ci si è trovati di fronte ad
+una infinita serie di problemi di portabilità.
 
 \begin{table}[htb]
   \footnotesize
@@ -408,10 +412,11 @@ tipi si sono rivelati inadeguati, e se ne 
 \end{table}
 
 Per questo motivo tutte le funzioni di libreria di solito non fanno
-riferimento ai tipi standard del linguaggio C, ma ad una serie di \textsl{tipi
-  primitivi}, riportati in \tabref{tab:intro_primitive_types}, caratteristici
-di ogni sistema, definiti nell'header file \file{sys/types.h}, che associano i
-tipi utilizzati dalle funzioni di sistema ai tipi elementari supportati dal
+riferimento ai tipi elementari dello standard del linguaggio C, ma ad una
+serie di \textsl{tipi primitivi}\index{tipo!primitivo} del sistema, riportati
+in \tabref{tab:intro_primitive_types}, e definiti nell'header file
+\file{sys/types.h}, in modo da mantenere completamente indipendenti i tipi
+utilizzati dalle funzioni di sistema dai tipi elementari supportati dal
 compilatore C.
 
 
@@ -440,15 +445,14 @@ identificati fra IEEE ed ISO; si tenga conto inoltre che molto spesso si usa
 l'estensione IEEE anche come aggiunta al nome POSIX (ad esempio si può parlare
 di POSIX.4 come di POSIX.1b).
 
-Si tenga presente però che nuove specifiche e proposte di standardizzazione si
-aggiungono continuamente, mentre le versioni precedenti vengono riviste;
+Si tenga presente inoltre che nuove specifiche e proposte di standardizzazione
+si aggiungono continuamente, mentre le versioni precedenti vengono riviste;
 talvolta poi i riferimenti cambiamo nome, per cui anche solo seguire le
 denominazioni usate diventa particolarmente faticoso; una pagina dove si
 possono recuperare varie (e di norma piuttosto intricate) informazioni è:
 \href{http://www.pasc.org/standing/sd11.html}
 {http://www.pasc.org/standing/sd11.html}.
 
-
 \begin{table}[htb]
   \footnotesize
   \centering
index 18f67f6..da3c35a 100644 (file)
--- a/macro.tex
+++ b/macro.tex
@@ -55,6 +55,7 @@
 %
 \newenvironment{prototype}[2]
 {% defining what is done by \begin
+  \nobreak
   \center
   \begin{boxedminipage}[c]{14cm}
   \footnotesize
@@ -90,6 +91,7 @@
 % 
 \newenvironment{functions}
 {% defining what is done by \begin
+  \nobreak
   \center
     \begin{boxedminipage}[c]{14cm}
       \footnotesize
index 8bde54c..f29d5e3 100644 (file)
@@ -1437,12 +1437,13 @@ stack all'indirizzo dove sono stati salvati i parametri, 
 normale pensare di poter effettuare questa operazione.
 
 In generale però possono esistere anche realizzazioni diverse, per questo
-motivo \macro{va\_list} è definito come \textsl{tipo opaco} e non può essere
-assegnato direttamente ad un'altra variabile dello stesso tipo. Per risolvere
-questo problema lo standard ISO C99\footnote{alcuni sistemi che non hanno
-  questa macro provvedono al suo posto \macro{\_\_va\_copy} che era il nome
-  proposto in una bozza dello standard.} ha previsto una macro ulteriore che
-permette di eseguire la copia di un puntatore alla lista degli argomenti:
+motivo \macro{va\_list} è definito come \textsl{tipo opaco}\index{tipo opaco}
+e non può essere assegnato direttamente ad un'altra variabile dello stesso
+tipo. Per risolvere questo problema lo standard ISO C99\footnote{alcuni
+  sistemi che non hanno questa macro provvedono al suo posto
+  \macro{\_\_va\_copy} che era il nome proposto in una bozza dello standard.}
+ha previsto una macro ulteriore che permette di eseguire la copia di un
+puntatore alla lista degli argomenti:
 \begin{prototype}{stdarg.h}{void va\_copy(va\_list dest, va\_list src)}
   Copia l'attuale valore \param{src} del puntatore alla lista degli argomenti
   su \param{dest}.
@@ -1548,7 +1549,12 @@ salvare il contesto dello stack 
 \end{functions}
   
 Quando si esegue la funzione il contesto corrente dello stack viene salvato
-nell'argomento \param{env}, una variabile di tipo \type{jmp\_buf} che deve
+nell'argomento \param{env}, una variabile di tipo
+\type{jmp\_buf}\footnote{questo è un classico esempio di variabile di
+  \textsl{tipo opaco}\index{tipo!opaco}. Si definiscono così strutture ed
+  altri oggetti usati da una libreria, la cui struttura interna non deve
+  essere vista dal programma chiamante (da cui il nome) che li devono
+  utilizzare solo attraverso dalle opportune funzioni di gestione.}  che deve
 essere stata definita in precedenza. In genere le variabili di tipo
 \type{jmp\_buf} vengono definite come variabili globali in modo da poter
 essere viste in tutte le funzioni del programma.
index 03d1bed..c5e1822 100644 (file)
@@ -1842,10 +1842,11 @@ verranno considerati nel calcolo di questi tempi.
 
 Come anticipato in \secref{sec:sys_unix_time} il \textit{calendar time} è
 mantenuto dal kernel in una variabile di tipo \type{time\_t}, che usualmente
-corrisponde ad un tipo nativo (in Linux è un intero a 32 bit).  Il valore
-corrente del \textit{calendar time}, che indicheremo come \textsl{tempo di
-  sistema}, può essere ottenuto con la funzione \funcd{time} che lo restituisce
-in nel suddetto formato; il suo prototipo è:
+corrisponde ad un tipo elementare (in Linux è definito come \ctyp{long int},
+che di norma corrisponde a 32 bit).  Il valore corrente del \textit{calendar
+  time}, che indicheremo come \textsl{tempo di sistema}, può essere ottenuto
+con la funzione \funcd{time} che lo restituisce in nel suddetto formato; il
+suo prototipo è:
 \begin{prototype}{time.h}{time\_t time(time\_t *t)}
   Legge il valore corrente del \textit{calendar time}.