Altre indicizzazioni, e inizio di readdir
[gapil.git] / intro.tex
index f3b65754937c36a0b2e2240419b9b7e3f4bf5143..27a1d33c44848d3b5904ceffc56b393356369e86 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -365,20 +365,24 @@ 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
   \centering
-  \begin{tabular}[c]{|l|c|c|l|}
+  \begin{tabular}[c]{|l|l|}
     \hline
     \textbf{Tipo} & \textbf{Contenuto} \\
     \hline
@@ -387,7 +391,7 @@ tipi si sono rivelati inadeguati, e se ne 
     \type{clock\_t} & contatore del tempo di sistema.\\
     \type{dev\_t}   & Numero di dispositivo.\\
     \type{gid\_t}   & Identificatore di un gruppo.\\
-    \type{ino\_t}   & Numero di \textit{inode}.\\
+    \type{ino\_t}   & Numero di \textit{inode}\index{inode}.\\
     \type{key\_t}   & Chiave per il System V IPC.\\
     \type{loff\_t}  & Posizione corrente in un file.\\
     \type{mode\_t}  & Attributi di un file.\\
@@ -396,8 +400,8 @@ tipi si sono rivelati inadeguati, e se ne 
     \type{pid\_t}   & Identificatore di un processo.\\
     \type{rlim\_t}  & Limite sulle risorse.\\
     \type{sigset\_t}& Insieme di segnali.\\
-    \type{ssize\_t} & Dimensione di un oggetto.\\
-    \type{ssize\_t} & Dimensione in numero  byte ritornata dalle funzioni.\\
+    \type{size\_t}  & Dimensione di un oggetto.\\
+    \type{ssize\_t} & Dimensione in numero di byte ritornata dalle funzioni.\\
     \type{ptrdiff\_t}& Differenza fra due puntatori.\\
     \type{time\_t}  & Numero di secondi (in tempo di calendario).\\
     \type{uid\_t}   & Identificatore di un utente.\\
@@ -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
@@ -631,12 +635,12 @@ propri header file.
 
 Le macro disponibili per i vari standard sono le seguenti:
 \begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{\_POSIX\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macro{\_POSIX\_SOURCE}] definendo questa macro si rendono disponibili
   tutte le funzionalità dello standard POSIX.1 (la versione IEEE Standard
   1003.1) insieme a tutte le funzionalità dello standard ISO C. Se viene anche
-  definita con un intero positivo la macro \const{\_POSIX\_C\_SOURCE} lo stato
+  definita con un intero positivo la macro \macro{\_POSIX\_C\_SOURCE} lo stato
   di questa non viene preso in considerazione.
-\item[\const{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
+\item[\macro{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
   positivo si controlla quale livello delle funzionalità specificate da POSIX
   viene messa a disposizione; più alto è il valore maggiori sono le
   funzionalità. Se è uguale a '1' vengono attivate le funzionalità specificate
@@ -647,7 +651,7 @@ Le macro disponibili per i vari standard sono le seguenti:
   Standard 1003.1b-1993).  Un valore maggiore o uguale a `199506L' attiva le
   funzionalità POSIX.1 specificate nell'edizione del 1996 (ISO/IEC 9945-1:
   1996). Valori superiori abiliteranno ulteriori estensioni.
-\item[\const{\_BSD\_SOURCE}] definendo questa macro si attivano le
+\item[\macro{\_BSD\_SOURCE}] definendo questa macro si attivano le
   funzionalità derivate da BSD4.3, insieme a quelle previste dagli standard
   ISO C, POSIX.1 e POSIX.2. Alcune delle funzionalità previste da BSD sono
   però in conflitto con le corrispondenti definite nello standard POSIX.1, in
@@ -658,29 +662,29 @@ Le macro disponibili per i vari standard sono le seguenti:
   questo caso occorre pertanto anche usare l'opzione \cmd{-lbsd-compat} con il
   compilatore per indicargli di utilizzare le versioni nella libreria di
   compatibilità prima di quelle normali.
-\item[\const{\_SVID\_SOURCE}] definendo questa macro si attivano le
+\item[\macro{\_SVID\_SOURCE}] definendo questa macro si attivano le
   funzionalità derivate da SVID. Esse comprendono anche quelle definite negli
   standard ISO C, POSIX.1, POSIX.2, and X/Open.
-\item[\const{\_XOPEN\_SOURCE}] definendo questa macro si attivano le
+\item[\macro{\_XOPEN\_SOURCE}] definendo questa macro si attivano le
   funzionalità descritte nella \textit{X/Open Portability Guide}. Anche queste
   sono un soprainsieme di quelle definite in POSIX.1 e POSIX.2 ed in effetti
-  sia \const{\_POSIX\_SOURCE} che \const{\_POSIX\_C\_SOURCE} vengono
+  sia \macro{\_POSIX\_SOURCE} che \macro{\_POSIX\_C\_SOURCE} vengono
   automaticamente definite. Sono incluse anche ulteriori funzionalità
   disponibili in BSD e SVID. Se il valore della macro è posto a 500 questo
   include anche le nuove definizioni introdotte con la \textit{Single UNIX
     Specification, version 2}, cioè Unix98.
-\item[\const{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si attivano le
+\item[\macro{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si attivano le
   ulteriori funzionalità necessarie ad essere conformi al rilascio del marchio
   \textit{X/Open Unix}.
-\item[\const{\_ISOC99\_SOURCE}] definendo questa macro si attivano le
+\item[\macro{\_ISOC99\_SOURCE}] definendo questa macro si attivano le
   funzionalità previste per la revisione delle librerie standard del C
   denominato ISO C99. Dato che lo standard non è ancora adottato in maniera
   ampia queste non sono abilitate automaticamente, ma le \acr{glibc} hanno già
   un'implementazione completa che può essere attivata definendo questa macro.
-\item[\const{\_LARGEFILE\_SOURCE}] definendo questa macro si attivano le
+\item[\macro{\_LARGEFILE\_SOURCE}] definendo questa macro si attivano le
   funzionalità per il supporto dei file di grandi dimensioni (il \textit{Large
     File Support} o LFS) con indici e dimensioni a 64 bit.
-\item[\const{\_GNU\_SOURCE}] definendo questa macro si attivano tutte le
+\item[\macro{\_GNU\_SOURCE}] definendo questa macro si attivano tutte le
   funzionalità disponibili: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID,
   X/Open, LFS più le estensioni specifiche GNU. Nel caso in cui BSD e POSIX
   confliggano viene data la precedenza a POSIX.
@@ -689,7 +693,7 @@ Le macro disponibili per i vari standard sono le seguenti:
 In particolare è da sottolineare che le \acr{glibc} supportano alcune
 estensioni specifiche GNU, che non sono comprese in nessuno degli
 standard citati. Per poterle utilizzare esse devono essere attivate
-esplicitamente definendo la macro \const{\_GNU\_SOURCE} prima di
+esplicitamente definendo la macro \macro{\_GNU\_SOURCE} prima di
 includere i vari header file.