+%% intro.tex
+%%
+%% Copyright (C) 2000-2002 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 "Prefazione",
+%% with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the
+%% license is included in the section entitled "GNU Free Documentation
+%% License".
+%%
\chapter{L'architettura del sistema}
\label{cha:intro_unix}
Quanto appena illustrato mette in evidenza il fatto che nella stragrande
maggioranza dei casi,\footnote{esistono implementazioni diverse delle librerie
- del C, come le \textit{libc5} o le \textit{uclib}, che non derivano dal
- progetto GNU, ma oggi sono, tranne casi particolari, completamente
- soppiantate dalle \acr{glibc}.} si dovrebbe usare il nome GNU/Linux
-(piuttosto che soltanto Linux) in quanto una parte essenziale del sistema
-(senza la quale niente funzionerebbe) è la GNU Standard C Library (in breve
-\acr{glibc}), ovvero la libreria realizzata dalla Free Software Foundation
-nella quale sono state implementate tutte le funzioni essenziali definite
-negli standard POSIX e ANSI C, utilizzabili da qualunque programma.
+ Standard del C, come le \textit{libc5} o le \textit{uClib}, che non derivano
+ dal progetto GNU. Le \textit{libc5} oggi sono, tranne casi particolari,
+ completamente soppiantate dalle \acr{glibc}, le \textit{uClib} pur non
+ essendo complete come le \acr{glibc}, restano invece molto diffuse nel mondo
+ embedded per le loro di dimensioni ridotte (e soprattutto la possibilità di
+ togliere le parti non necessearie), e pertanto costituiscono un valido
+ rimpiazzo delle \acr{glibc} in tutti quei sistemi specializzati che
+ richiedono una minima occupazione di memoria.} si dovrebbe usare il nome
+GNU/Linux (piuttosto che soltanto Linux) in quanto una parte essenziale del
+sistema (senza la quale niente funzionerebbe) è la GNU Standard C Library (in
+breve \acr{glibc}), ovvero la libreria realizzata dalla Free Software
+Foundation nella quale sono state implementate tutte le funzioni essenziali
+definite negli standard POSIX e ANSI C, utilizzabili da qualunque programma.
Le funzioni di questa libreria sono quelle riportate dalla terza sezione del
-\textsl{Manuale di Programmazione di Unix }(cioè accessibili con il comando
+\textsl{Manuale di Programmazione di Unix} (cioè accessibili con il comando
\cmd{man 3 <nome>}) e sono costruite sulla base delle chiamate al sistema del
kernel; è importante avere presente questa distinzione, fondamentale dal punto
di vista dell'implementazione, anche se poi, nella realizzazione di normali
\begin{table}[htb]
\footnotesize
\centering
- \begin{tabular}[c]{|l|l|}
+ \begin{tabular}[c]{|l|c|c|l|}
\hline
- \textbf{Standard} & \textbf{Contenuto} \\
+ \multirow{2}{*}{\textbf{Header}}&
+ \multicolumn{2}{|c|}{\textbf{Standard}}&
+ \multirow{2}{*}{\textbf{Contenuto}} \\
+ \cline{2-3}
+ & ANSI C& POSIX& \\
\hline
\hline
- \file{assert.h}& Verifica le asserzioni fatte in un programma.\\
- \file{cpio.h} & .\\
- \file{dirent.h}& .\\
- \file{errno.h} & .\\
- \file{} & .\\
- \file{} & .\\
- \file{} & .\\
- \file{} & .\\
- \file{} & .\\
- \file{} & .\\
- \file{stdio.h} & I/O bufferizzato in standard ANSI C.\\
- \file{stdlib.h}& definizioni della libreria standard.\\
- \file{unistd.h}& .\\
+ \file{assert.h}&$\bullet$&$\bullet$& Verifica le asserzioni fatte in un
+ programma.\\
+ \file{errno.h} &$\bullet$&$\bullet$& Errori di sistema.\\
+ \file{fcntl.h} &$\bullet$&$\bullet$& Controllo sulle opzioni dei file.\\
+ \file{limits.h}&$\bullet$&$\bullet$& Limiti e parametri del sistema.\\
+ \file{} &$\bullet$&$\bullet$& .\\
+ \file{} &$\bullet$&$\bullet$& .\\
+ \file{} &$\bullet$&$\bullet$& .\\
+ \file{} &$\bullet$&$\bullet$& .\\
+ \file{} &$\bullet$&$\bullet$& .\\
+ \file{stdio.h} &$\bullet$&$\bullet$& I/O bufferizzato in standard ANSI C.\\
+ \file{stdlib.h}&$\bullet$&$\bullet$& definizioni della libreria standard.\\
\hline
\end{tabular}
\caption{Elenco dei vari header file definiti dallo standard POSIX.}
\begin{table}[htb]
\footnotesize
\centering
- \begin{tabular}[c]{|l|l|}
+ \begin{tabular}[c]{|l|c|c|l|}
\hline
\textbf{Tipo} & \textbf{Contenuto} \\
\hline
Le macro disponibili per i vari standard sono le seguenti:
\begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
-\item[\macro{\_POSIX\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\const{\_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 \macro{\_POSIX\_C\_SOURCE} lo stato
+ definita con un intero positivo la macro \const{\_POSIX\_C\_SOURCE} lo stato
di questa non viene preso in considerazione.
-\item[\macro{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
+\item[\const{\_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
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[\macro{\_BSD\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_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
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[\macro{\_SVID\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_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[\macro{\_XOPEN\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_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 \macro{\_POSIX\_SOURCE} che \macro{\_POSIX\_C\_SOURCE} vengono
+ sia \const{\_POSIX\_SOURCE} che \const{\_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[\macro{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si attivano le
+\item[\const{\_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
+\item[\const{\_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
+\item[\const{\_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
+\item[\const{\_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.
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
+esplicitamente definendo la macro \const{\_GNU\_SOURCE} prima di
includere i vari header file.