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 84b01947ef95859750c150fc36d8508a4f81c523..5b3b0b51fba8491109cb45ddca066d348e5fa48b 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}
     \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.
 
 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
   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} 
   
 \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
 \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
 
 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 è:
 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}
 
     \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
 
 \begin{figure}[!htb]
   \footnotesize
index 5bf7cf48a2c56011684998bc940c0370c8e1d99d..8d6b55b722d24c1f101b1f1e1509ece5861fa3a9 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.
 
 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}
 
 
 \subsection{Gli stream standard}
index e349fe678271fbaea6d618fe4f6d746a97f35ab4..27a1d33c44848d3b5904ceffc56b393356369e86 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
 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
 
 \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
 \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.
 
 
 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).
 
 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}.
 
 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
 \begin{table}[htb]
   \footnotesize
   \centering
index 18f67f627d7ea5d9875be47d46828e253300652b..da3c35a5926442fae15326abeefce368ff716212 100644 (file)
--- a/macro.tex
+++ b/macro.tex
@@ -55,6 +55,7 @@
 %
 \newenvironment{prototype}[2]
 {% defining what is done by \begin
 %
 \newenvironment{prototype}[2]
 {% defining what is done by \begin
+  \nobreak
   \center
   \begin{boxedminipage}[c]{14cm}
   \footnotesize
   \center
   \begin{boxedminipage}[c]{14cm}
   \footnotesize
@@ -90,6 +91,7 @@
 % 
 \newenvironment{functions}
 {% defining what is done by \begin
 % 
 \newenvironment{functions}
 {% defining what is done by \begin
+  \nobreak
   \center
     \begin{boxedminipage}[c]{14cm}
       \footnotesize
   \center
     \begin{boxedminipage}[c]{14cm}
       \footnotesize
index 8bde54cbdcba74606b1d8107690c9a6e3a21a9dc..f29d5e31e1e1844f6c627613e26a342cc437ccbd 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
 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}.
 \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
 \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.
 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 03d1bed3556382319ccf57f0471e4ff57d99cff3..c5e182262fd1bae8914290c840143f5274eafe79 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
 
 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}.
   
 \begin{prototype}{time.h}{time\_t time(time\_t *t)}
   Legge il valore corrente del \textit{calendar time}.