- disponibili in BSD e SVID. Se il valore della macro è posto a
- ``\texttt{500}'' questo include anche le nuove definizioni introdotte con la
- \textit{Single UNIX Specification, version 2}, cioè Unix98.
-\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[\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[\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[\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.
+ disponibili in BSD e SVID:
+ \begin{itemize}
+ \item la definizione della macro ad un valore qualunque attiva le
+ funzionalità specificate negli standard POSIX.1, POSIX.2 e XPG4;
+ \item un valore di ``\texttt{500}'' o superiore rende disponibili anche le
+ funzionalità introdotte con SUSv2, vale a dire la conformità ad Unix98;
+ \item a partire dalla versione 2.2 delle \acr{glibc} un valore uguale a
+ ``\texttt{600}'' o superiore rende disponibili anche le funzionalità
+ introdotte con SUSv3, corrispondenti allo standard POSIX.1-2001 più le
+ estensioni XSI.
+ \end{itemize}
+
+\item[\macro{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si rendono
+ disponibili le ulteriori funzionalità necessarie ad essere conformi al
+ rilascio del marchio \textit{X/Open Unix} corrispondenti allo standard
+ Unix95, vale a dire quelle specificate da SUSv1/XPG4v2. Questa macro viene
+ definita implicitamente tutte le volte che si imposta
+ \macro{\_XOPEN\_SOURCE} ad un valore maggiore o uguale a 500.
+
+\item[\macro{\_ISOC99\_SOURCE}] definendo questa macro si rendono disponibili
+ le funzionalità previste per la revisione delle librerie standard del C
+ introdotte con lo standard ISO C99. La macro è definita a partire dalla
+ versione 2.1.3 delle \acr{glibc}.
+
+ Le precedenti versioni della serie 2.1.x riconoscevano le stesse estensioni
+ con la macro \macro{\_ISOC9X\_SOURCE}, dato che lo standard non era stato
+ finalizzato, ma le \acr{glibc} avevano già un'implementazione completa che
+ poteva essere attivata definendo questa macro. Benché questa sia obsoleta
+ viene tuttora riconosciuta come equivalente di \macro{\_ISOC99\_SOURCE} per
+ 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.
+
+ L'uso di \macro{\_GNU\_SOURCE} è equivalente alla definizione contemporanea
+ delle macro: \macro{\_BSD\_SOURCE}, \macro{\_SVID\_SOURCE},
+ \macro{\_POSIX\_SOURCE}, \macro{\_ISOC99\_SOURCE}, inoltre
+ \macro{\_POSIX\_C\_SOURCE} con valore ``\texttt{200112L}'' (o
+ ``\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
+ \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.
+
+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:
+\begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
+
+\item[\macro{\_LARGEFILE\_SOURCE}] definendo questa macro si rendono
+ disponibili alcune funzioni che consentono di superare una inconsistenza
+ presente negli standard con i file di grandi dimensioni, ed in particolare
+ definire le due funzioni \func{fseeko} e \func{ftello} che al contrario
+ delle corrispettive \func{fseek} e \func{ftell} usano il tipo di dato
+ specifico \ctyp{off\_t} (vedi sez.~\ref{sec:file_fseek}).
+
+\item[\macro{\_LARGEFILE64\_SOURCE}] definendo questa macro si rendono
+ disponibili le funzioni di una interfaccia alternativa al supporto di valori
+ a 64 bit nelle funzioni di gestione dei file (non supportati in certi
+ sistemi), caratterizzate dal suffisso \texttt{64} aggiunto ai vari nomi di
+ tipi di dato e funzioni (come \ctyp{off64\_t} al posto di \ctyp{off\_t} o
+ \func{lseek64} al posto di \func{lseek}).
+
+ Le funzioni di questa interfaccia alternativa sono state proposte come una
+ estensione ad uso di transizione per le \textit{Single UNIX Specification},
+ per consentire la gestione di file di grandi dimensioni anche nei sistemi a
+ 32 bit, in cui la dimensione massima, espressa con un intero, non poteva
+ superare i 2 gigabyte. Nei nuovi programmi queste funzioni devono essere
+ evitate, a favore dell'uso macro \macro{\_FILE\_OFFSET\_BITS}, che definita
+ al valore di \texttt{64} consente di usare in maniera trasparente le
+ funzioni dell'interfaccia classica.
+
+\item[\macro{\_FILE\_OFFSET\_BITS}] la definizione di questa macro al valore
+ di \texttt{64} consente di attivare la conversione automatica di tutti i
+ riferimenti a dati e funzioni a 32 bit nelle funzioni di interfaccia ai file
+ con le equivalenti a 64 bit, senza dover utilizzare esplicitamente
+ l'interfaccia alternativa appena illustrata. In questo modo diventa
+ possibile usare le ordinarie funzioni per effettuare operazioni a 64 bit sui
+ file anche su sistemi a 32 bit.\footnote{basterà ricompilare il programma
+ dopo averla definita, e saranno usate in modo trasparente le funzioni a 64
+ bit.}
+
+ Se la macro non è definita o è definita con valore \texttt{32} questo
+ comportamento viene disabilitato, e sui sistemi a 32 bit verranno usate le
+ ordinarie funzioni a 32 bit, non avendo più il supporto per file di grandi
+ dimensioni. Su sistemi a 64 bit invece, dove il problema non sussiste, la
+ 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
+