+%% 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.}
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
\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.\\
\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.\\
\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.
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