X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=intro.tex;h=27a1d33c44848d3b5904ceffc56b393356369e86;hp=f3b65754937c36a0b2e2240419b9b7e3f4bf5143;hb=613d2f30d1c3ec28c569578a7b7bab23a40e8fea;hpb=5a59e67204ff436dceb6a13ed39e876aea3945a8 diff --git a/intro.tex b/intro.tex index f3b6575..27a1d33 100644 --- 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.