Aggiornamento anno note di copyright, dimenticato da gennaio...
[gapil.git] / intro.tex
index 4e77602afd08fa29150b4422b746098e09c4b75a..1fa1d24e303760926581831852ebf3c0388ea2a9 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -1,6 +1,6 @@
 %% intro.tex
 %%
 %% intro.tex
 %%
-%% Copyright (C) 2000-2007 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2008 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -445,7 +445,7 @@ una infinita serie di problemi di portabilit
     \hline
     \type{caddr\_t} & Core address.\\
     \type{clock\_t} & Contatore del tempo di sistema.\\
     \hline
     \type{caddr\_t} & Core address.\\
     \type{clock\_t} & Contatore del tempo di sistema.\\
-    \type{dev\_t}   & Numero di dispositivo.\\
+    \type{dev\_t}   & Numero di dispositivo (vedi sez.~\ref{sec:file_mknod}).\\
     \type{gid\_t}   & Identificatore di un gruppo.\\
     \type{ino\_t}   & Numero di \index{inode} \textit{inode}.\\
     \type{key\_t}   & Chiave per il System V IPC.\\
     \type{gid\_t}   & Identificatore di un gruppo.\\
     \type{ino\_t}   & Numero di \index{inode} \textit{inode}.\\
     \type{key\_t}   & Chiave per il System V IPC.\\
@@ -578,12 +578,12 @@ mirante a standardizzare l'interfaccia con il sistema operativo.
 Ma gli standard POSIX non si limitano alla standardizzazione delle funzioni di
 libreria, e in seguito sono stati prodotti anche altri standard per la shell e
 i comandi di sistema (1003.2), per le estensioni \textit{real-time} e per i
 Ma gli standard POSIX non si limitano alla standardizzazione delle funzioni di
 libreria, e in seguito sono stati prodotti anche altri standard per la shell e
 i comandi di sistema (1003.2), per le estensioni \textit{real-time} e per i
-thread (rispettivamente 1003.1d e 1003.1c) per i socket (1003.1g) e vari
-altri.  In tab.~\ref{tab:intro_posix_std} è riportata una classificazione
-sommaria dei principali documenti prodotti, e di come sono 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 è più comune parlare di POSIX.4
-come di POSIX.1b.
+\itindex{thread} \textit{thread} (rispettivamente 1003.1d e 1003.1c) per i
+socket (1003.1g) e vari altri.  In tab.~\ref{tab:intro_posix_std} è riportata
+una classificazione sommaria dei principali documenti prodotti, e di come sono
+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 è più comune
+parlare di POSIX.4 come di POSIX.1b.
 
 Si tenga presente inoltre 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;
@@ -606,7 +606,7 @@ possono recuperare varie (e di norma piuttosto intricate) informazioni 
     POSIX.2 & 1003.2 & 9945-2& Comandi                                      \\
     POSIX.3 & 2003   &TR13210& Metodi di test                               \\
     POSIX.4 & 1003.1b &  --- & Estensioni real-time                         \\
     POSIX.2 & 1003.2 & 9945-2& Comandi                                      \\
     POSIX.3 & 2003   &TR13210& Metodi di test                               \\
     POSIX.4 & 1003.1b &  --- & Estensioni real-time                         \\
-    POSIX.4a& 1003.1c &  --- & Thread                                       \\
+    POSIX.4a& 1003.1c &  --- & \itindex{thread} Thread                      \\
     POSIX.4b& 1003.1d &9945-1& Ulteriori estensioni real-time               \\
     POSIX.5 & 1003.5  & 14519& Interfaccia per il linguaggio ADA            \\
     POSIX.6 & 1003.2c,1e& 9945-2& Sicurezza                                 \\
     POSIX.4b& 1003.1d &9945-1& Ulteriori estensioni real-time               \\
     POSIX.5 & 1003.5  & 14519& Interfaccia per il linguaggio ADA            \\
     POSIX.6 & 1003.2c,1e& 9945-2& Sicurezza                                 \\
@@ -632,11 +632,12 @@ sistema e che sono definite nello standard POSIX.2.
 
 Nelle versioni più recenti del kernel e delle librerie sono inoltre supportate
 ulteriori funzionalità aggiunte dallo standard POSIX.1c per quanto riguarda i
 
 Nelle versioni più recenti del kernel e delle librerie sono inoltre supportate
 ulteriori funzionalità aggiunte dallo standard POSIX.1c per quanto riguarda i
-\textit{thread} (vedi cap.~\ref{cha:threads}), e dallo standard POSIX.1b per
-quanto riguarda i segnali e lo \itindex{scheduler} scheduling real-time
-(sez.~\ref{sec:sig_real_time} e sez.~\ref{sec:proc_real_time}), la misura del
-tempo, i meccanismi di intercomunicazione (sez.~\ref{sec:ipc_posix}) e l'I/O
-asincrono (sez.~\ref{sec:file_asyncronous_io}).
+\itindex{thread} \textit{thread} (vedi cap.~\ref{cha:threads}), e dallo
+standard POSIX.1b per quanto riguarda i segnali e lo \itindex{scheduler}
+scheduling real-time (sez.~\ref{sec:sig_real_time} e
+sez.~\ref{sec:proc_real_time}), la misura del tempo, i meccanismi di
+intercomunicazione (sez.~\ref{sec:ipc_posix}) e l'I/O asincrono
+(sez.~\ref{sec:file_asyncronous_io}).
 
 Lo standard principale resta comunque POSIX.1, che continua ad evolversi; la
 versione più nota, cui gran parte delle implementazioni fanno riferimento, e
 
 Lo standard principale resta comunque POSIX.1, che continua ad evolversi; la
 versione più nota, cui gran parte delle implementazioni fanno riferimento, e
@@ -736,7 +737,7 @@ versione delle \textit{Single UNIX Specification} che verranno chiamate SUSv4.
 
 In Linux, grazie alle \acr{glibc}, la conformità agli standard appena
 descritti può essere richiesta sia attraverso l'uso di opportune opzioni del
 
 In Linux, grazie alle \acr{glibc}, la conformità agli standard appena
 descritti può essere richiesta sia attraverso l'uso di opportune opzioni del
-compilatore, il \texttt{gcc}, che definendo delle specifiche costanti prima
+compilatore (il \texttt{gcc}) che definendo delle specifiche costanti prima
 dell'inclusione dei file di dichiarazione (gli \textit{header file}) che
 definiscono le funzioni di libreria.
 
 dell'inclusione dei file di dichiarazione (gli \textit{header file}) che
 definiscono le funzioni di libreria.
 
@@ -797,7 +798,7 @@ in esse definite, sono illustrate nel seguente elenco:
   \item un valore maggiore o uguale a ``\texttt{199506L}'' rende disponibili
     le funzionalità previste dallo standard POSIX.1 specificate nell'edizione
     del 1996 (\textit{ISO/IEC 9945-1:1996}), ed in particolare le definizioni
   \item un valore maggiore o uguale a ``\texttt{199506L}'' rende disponibili
     le funzionalità previste dallo standard POSIX.1 specificate nell'edizione
     del 1996 (\textit{ISO/IEC 9945-1:1996}), ed in particolare le definizioni
-    dello standard POSIX.1c per i \textit{thread};
+    dello standard POSIX.1c per i \itindex{thread} \textit{thread};
   \item a partire dalla versione 2.3.3 delle \acr{glibc} un valore maggiore o
     uguale a ``\texttt{200112L}'' rende disponibili le funzionalità di base
     previste dallo standard POSIX.1-2001, escludendo le estensioni XSI;
   \item a partire dalla versione 2.3.3 delle \acr{glibc} un valore maggiore o
     uguale a ``\texttt{200112L}'' rende disponibili le funzionalità di base
     previste dallo standard POSIX.1-2001, escludendo le estensioni XSI;
@@ -820,11 +821,13 @@ in esse definite, sono illustrate nel seguente elenco:
 
   Si tenga inoltre presente che la preferenza verso le versioni delle funzioni
   usate da BSD viene mantenuta soltanto se nessuna delle ulteriori macro di
 
   Si tenga inoltre presente che la preferenza verso le versioni delle funzioni
   usate da BSD viene mantenuta soltanto se nessuna delle ulteriori macro di
-  specificazione di standard successivi (\macro{\_SVID\_SOURCE},
-  \macro{\_POSIX\_SOURCE}, \macro{\_POSIX\_C\_SOURCE},
+  specificazione di standard successivi (vale a dire una fra
+  \macro{\_POSIX\_C\_SOURCE}, \macro{\_POSIX\_SOURCE}, \macro{\_SVID\_SOURCE},
   \macro{\_XOPEN\_SOURCE}, \macro{\_XOPEN\_SOURCE\_EXTENDED} o
   \macro{\_GNU\_SOURCE}) è stata a sua volta attivata, nel qual caso queste
   \macro{\_XOPEN\_SOURCE}, \macro{\_XOPEN\_SOURCE\_EXTENDED} o
   \macro{\_GNU\_SOURCE}) è stata a sua volta attivata, nel qual caso queste
-  hanno la precedenza.
+  hanno la precedenza. Se però si definisce \macro{\_BSD\_SOURCE} dopo aver
+  definito una di queste macro, l'effetto sarà quello di dare la precedenza
+  alle funzioni in forma BSD.
 
 \item[\macro{\_SVID\_SOURCE}] definendo questa macro si rendono disponibili le
   funzionalità derivate da SVID. Esse comprendono anche quelle definite negli
 
 \item[\macro{\_SVID\_SOURCE}] definendo questa macro si rendono disponibili le
   funzionalità derivate da SVID. Esse comprendono anche quelle definite negli
@@ -833,10 +836,11 @@ in esse definite, sono illustrate nel seguente elenco:
 
 \item[\macro{\_XOPEN\_SOURCE}] definendo questa macro si rendono disponibili
   le funzionalità descritte nella \textit{X/Open Portability Guide}. Anche
 
 \item[\macro{\_XOPEN\_SOURCE}] definendo questa macro si rendono disponibili
   le funzionalità descritte nella \textit{X/Open Portability Guide}. Anche
-  queste sono un sovrainsieme di quelle definite in POSIX.1 e POSIX.2 ed in
-  effetti sia \macro{\_POSIX\_SOURCE} che \macro{\_POSIX\_C\_SOURCE} vengono
-  automaticamente definite. Sono incluse anche ulteriori funzionalità
-  disponibili in BSD e SVID:
+  queste sono un sovrainsieme di quelle definite negli standard POSIX.1 e
+  POSIX.2 ed in effetti sia \macro{\_POSIX\_SOURCE} che
+  \macro{\_POSIX\_C\_SOURCE} vengono automaticamente definite. Sono incluse
+  anche ulteriori funzionalità disponibili in BSD e SVID, più una serie di
+  estensioni a secondo dei seguenti valori:
   \begin{itemize}
   \item la definizione della macro ad un valore qualunque attiva le
     funzionalità specificate negli standard POSIX.1, POSIX.2 e XPG4;
   \begin{itemize}
   \item la definizione della macro ad un valore qualunque attiva le
     funzionalità specificate negli standard POSIX.1, POSIX.2 e XPG4;
@@ -868,9 +872,9 @@ in esse definite, sono illustrate nel seguente elenco:
   compatibilità. 
 
 \item[\macro{\_GNU\_SOURCE}] definendo questa macro si rendono disponibili
   compatibilità. 
 
 \item[\macro{\_GNU\_SOURCE}] definendo questa macro si rendono disponibili
-  tutte le funzionalità disponibili nei vari standard oltre a varie
-  estensioni. Gli standard coperti sono: ISO C89, ISO C99, POSIX.1, POSIX.2,
-  BSD, SVID, X/Open, SUS. 
+  tutte le funzionalità disponibili nei vari standard oltre a varie estensioni
+  specifiche presenti solo nelle \acr{glibc} ed in Linux. Gli standard coperti
+  sono: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, SUS.
 
   L'uso di \macro{\_GNU\_SOURCE} è equivalente alla definizione contemporanea
   delle macro: \macro{\_BSD\_SOURCE}, \macro{\_SVID\_SOURCE},
 
   L'uso di \macro{\_GNU\_SOURCE} è equivalente alla definizione contemporanea
   delle macro: \macro{\_BSD\_SOURCE}, \macro{\_SVID\_SOURCE},
@@ -879,22 +883,26 @@ in esse definite, sono illustrate nel seguente elenco:
   ``\texttt{199506L}'' per le versioni delle \acr{glibc} precedenti la 2.5),
   \macro{\_XOPEN\_SOURCE\_EXTENDED} e \macro{\_XOPEN\_SOURCE} con valore 600
   (o 500 per le versioni delle \acr{glibc} precedenti la 2.2); oltre a queste
   ``\texttt{199506L}'' per le versioni delle \acr{glibc} precedenti la 2.5),
   \macro{\_XOPEN\_SOURCE\_EXTENDED} e \macro{\_XOPEN\_SOURCE} con valore 600
   (o 500 per le versioni delle \acr{glibc} precedenti la 2.2); oltre a queste
-  vengono pure attivate le ulteriori \macro{\_ATFILE\_SOURCE} e
+  vengono pure attivate le ulteriori due macro \macro{\_ATFILE\_SOURCE} e
   \macro{\_LARGEFILE64\_SOURCE} che definiscono funzioni previste
   esclusivamente dalle \acr{glibc}.
  
 \end{basedescript}
 
 Benché Linux supporti in maniera estensiva gli standard più diffusi, esistono
   \macro{\_LARGEFILE64\_SOURCE} che definiscono funzioni previste
   esclusivamente dalle \acr{glibc}.
  
 \end{basedescript}
 
 Benché Linux supporti in maniera estensiva gli standard più diffusi, esistono
-comunque delle estensioni specifiche e delle funzionalità specifiche, non
-presenti in altri standard e lo stesso vale per le \acr{glibc} stesse, che
-definiscono anche delle ulteriori funzioni di libreria. Ovviamente l'uso di
-queste funzionalità deve essere evitato se si ha a cuore la portabilità, ma
-qualora questo non sia un requisito esse possono rivelarsi molto utili.
+comunque delle estensioni e funzionalità specifiche, non presenti in altri
+standard e lo stesso vale per le \acr{glibc} stesse, che definiscono anche
+delle ulteriori funzioni di libreria. Ovviamente l'uso di queste funzionalità
+deve essere evitato se si ha a cuore la portabilità, ma qualora questo non sia
+un requisito esse possono rivelarsi molto utili.
 
 Come per l'aderenza ai vari standard, le funzionalità aggiuntive possono
 essere rese esplicitamente disponibili tramite la definizione di opportune
 
 Come per l'aderenza ai vari standard, le funzionalità aggiuntive possono
 essere rese esplicitamente disponibili tramite la definizione di opportune
-macro di preprocessore, che si sono illustrate nel seguente elenco:
+macro di preprocessore, alcune di queste vengono attivate con la definizione
+di \macro{\_GNU\_SOURCE}, mentre altre devono essere attivate esplicitamente,
+inoltre alcune estensioni possono essere attivate indipendentemente tramite
+una opportuna macro; queste estensioni sono illustrate nel seguente elenco:
+
 \begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
 
 \item[\macro{\_LARGEFILE\_SOURCE}] definendo questa macro si rendono
 \begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
 
 \item[\macro{\_LARGEFILE\_SOURCE}] definendo questa macro si rendono
@@ -937,33 +945,53 @@ macro di preprocessore, che si sono illustrate nel seguente elenco:
   macro non ha nessun effetto.
 
 \item[\macro{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili
   macro non ha nessun effetto.
 
 \item[\macro{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili
-  le funzioni 
-
-\item[\macro{\_FORTIFY\_SOURCE}] definendo questa macro si rendono
-  disponibili le estensioni delle funzioni di creazione di file e directory
-  che consentono una specificazione coerente dei pathname relativi illustrate
-  in sez.~\ref{sec:file_openat}.
-
-\item[\macro{\_REENTRANT}] definendo questa macro si rendono disponibili
+  le estensioni delle funzioni di creazione di file e directory che risolvono
+  i problemi di sicurezza insiti nell'uso di pathname relativi con programmi
+  \itindex{thread} \textit{multi-thread} illustrate in
+  sez.~\ref{sec:file_openat}. 
+
+\item[\macro{\_REENTRANT}] definendo questa macro, o la equivalente
+  \macro{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le
+  versioni \index{funzioni!rientranti} rientranti (vedi
+  sez.~\ref{sec:proc_reentrant}) di alcune funzioni, necessarie quando si
+  usano i \itindex{thread} \textit{thread}.  Alcune di queste funzioni sono
+  anche previste nello standard POSIX.1c, ma ve ne sono altre che sono
+  disponibili soltanto su alcuni sistemi, o specifiche del \acr{glibc}, e
+  possono essere utilizzate una volta definita la macro.
+
+\item[\macro{\_FORTIFY\_SOURCE}] definendo questa macro viene abilitata
+  l'inserimento di alcuni controlli per alcune funzioni di allocazione e
+  manipolazione di memoria e stringhe che consentono di rilevare
+  automaticamente alcuni errori di \textit{buffer overflow} nell'uso delle
+  stesse. La funzionalità è stata introdotta a partire dalla versione 2.3.4
+  delle \acr{glibc} e richiede anche il supporto da parte del compilatore, che
+  è disponibile solo a partire dalla versione 4.0 del \texttt{gcc}.
+
+  Le funzioni di libreria che vengono messe sotto controllo quando questa
+  funzionalità viene attivata sono, al momento della stesura di queste note,
+  le seguenti: \func{memcpy}, \func{mempcpy}, \func{memmove}, \func{memset},
+  \func{stpcpy}, \func{strcpy}, \func{strncpy}, \func{strcat}, \func{strncat},
+  \func{sprintf}, \func{snprintf}, \func{vsprintf}, \func{vsnprintf}, e
+  \func{gets}.
+
+  La macro prevede due valori, con \texttt{1} vengono eseguiti dei controlli
+  di base che non cambiano il comportamento dei programmi se si richiede una
+  ottimizzazione di livello uno o superiore,\footnote{vale a dire se si usa
+    l'opzione \texttt{-O1} o superiore del \texttt{gcc}.}  mentre con il
+  valore \texttt{2} vengono aggiunti maggiori controlli.
 
 \end{basedescript}
 
 
 \end{basedescript}
 
-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 \macro{\_GNU\_SOURCE} prima di includere i vari header
-file.
+Se non è stata specificata esplicitamente nessuna di queste macro il default
+assunto è che siano definite \macro{\_BSD\_SOURCE}, \macro{\_SVID\_SOURCE},
+\macro{\_POSIX\_SOURCE}, e \macro{\_POSIX\_C\_SOURCE} con valore
+``\texttt{200112L}'' (o ``\texttt{199506L}'' per le versioni delle \acr{glibc}
+precedenti la 2.4). Si ricordi infine che perché queste macro abbiano effetto
+devono essere sempre definite prima dell'inclusione dei file di dichiarazione.
 
 
 % vedi anche man feature_test_macros
 
 
 
 % vedi anche man feature_test_macros
 
-%% \subsection{Gli standard di GNU/Linux}
-%% \label{sec:intro_linux_std}
-
-% TODO Da fare (o cassare, a seconda del tempo e della voglia).
-
-
-
 % LocalWords:  like kernel multitasking scheduler preemptive sez swap is cap VM
 % LocalWords:  everything bootstrap init shell Windows Foundation system call
 % LocalWords:  fig libc uClib glibc embedded Library POSIX username PAM Methods
 % LocalWords:  like kernel multitasking scheduler preemptive sez swap is cap VM
 % LocalWords:  everything bootstrap init shell Windows Foundation system call
 % LocalWords:  fig libc uClib glibc embedded Library POSIX username PAM Methods
@@ -983,7 +1011,9 @@ file.
 % LocalWords:  LARGEFILE Support LFS dell' black rectangle node fill cpu draw
 % LocalWords:  ellipse mem anchor west proc SysV SV Definition SCO Austin XSI
 % LocalWords:  Technical TC SUS Opengroup features STRICT std ATFILE fseeko
 % LocalWords:  LARGEFILE Support LFS dell' black rectangle node fill cpu draw
 % LocalWords:  ellipse mem anchor west proc SysV SV Definition SCO Austin XSI
 % LocalWords:  Technical TC SUS Opengroup features STRICT std ATFILE fseeko
-% LocalWords:  ftello fseek ftell lseek FORTIFY REENTRANT
+% LocalWords:  ftello fseek ftell lseek FORTIFY REENTRANT SAFE overflow memcpy
+% LocalWords:  mempcpy memmove memset stpcpy strcpy strncpy strcat strncat gets
+% LocalWords:  sprintf snprintf vsprintf vsnprintf
 
 %%% Local Variables: 
 %%% mode: latex
 
 %%% Local Variables: 
 %%% mode: latex