[successivo] [precedente] [inizio] [fine] [indice generale] [parte]


Capitolo 8.   Introduzione

POSIX, ovvero Portable Operating System Interface, non è solo uno standard ma, un insieme di gruppi di lavoro che lavorano per un risultato finale. Ognuno di questi gruppi cerca di studiare e proporre delle soluzioni.

La prima proposta di standardizzazione è stata POSIX.1, che rappresenta le chiamate standard di Unix come fork o system. I successivi, tipo POSIX.4 hanno introdotto nuove caratteristiche, rispetto a POSIX.1 come, in questo caso, la gestione dei thread. Le nuove caratteristiche portano non solo complessità ma anche nuovi concetti software per le applicazioni rivolte al mondo reale.

La "strana" numerazione deriva dalla mera gestione dei documenti all'interno degli enti competenti. Per questo POSIX.1 è anche conosciuto come 1003.1 e POSIX.4a come POSIX 1003.1c.

Sia chiaro che spesso POSIX è sinonimo di compatibilità con Unix. Rendere GNU/Linux un vero Unix vuol dire anche rendere sistema operativo e strumenti di sviluppo aderenti allo standard.

Che ne sarebbe se il compilatore C fosse POSIX.4a compatibile mentre il kernel GNU/Linux solo POSIX.1?

Sebbene POSIX sia sinonimo di portabilità ci sono aree di sviluppo che non riguardano lo standard come le librerie per lo sviluppo di applicativi di rete e la gestione dell'interfaccia grafica.

8.1   Quale POSIX?

La varietà dello standard POSIX impone in primo luogo di verificare il grado di compatbilità possibile tra l'ambiente di sviluppo che avete scelto e lo standard che volete raggiungere.

Solo una precisa verifica dello standard consente di continuare senza problemi lo sviluppo di una applicazione.

Queste preziose informazioni si trovano nel file di <include> unistd.h. Esso definisce gli standard e la conformità del sistema operativo algli stessi.

Se questa affermazione è vera sicuramente per lo standard POSIX lo è altrettanto per lo standard UNIX98 o XOPEN. Diversamente senza il file di <include> limits.h non sarebbe possibile individuare dei limiti software legati ai parametri dello standard. Per fare un esempio se la caratteristica per l'utilizzo dell I/O asincrono è presente, lo standard POSIX limita il massimo numero di operazioni a due solamente.

Per chiedere l'aderenza allo standard è sufficiente dichiarare la macro _POSIX_SOURCE o la macro _POSIX_C_SOURCE.

La prima dichiara conformità allo standard POSIX.1 la seconda è un invito ad aderire ad un preciso standard. In ambiente GNU si può definire la macro _GNU_SOURCE, la quale garantisce il corretto numero di versione per tutti gli standard raggiunti dalla GNU.

Listato 8.1. Quale POSIX?.

// #define _POSIX_SOURCE
// #define _POSIX_C_SOURCE 199506L
// #define _GNU_SOURCE
#include <unistd.h>
#include <limits.h>

#if _POSIX_VERSION >= 199506L
char* str = "POSIX.1c. Buona fortuna!.\n";
#else
char* str = "Mi dispiace devi aggiornare il tuo sistema.\n";
#endif

int main ()
{
        printf ("%s", str);
        exit (0);
}

Se non viene definita la macro _POSIX_C_SOURCE il file di <include> unistd.h la definisce con un numero che individua la conformità dello standard; questo numero è rappresentato dall'anno seguito dal mese di approvazione (esempio: 199309L).

Tuttavia _POSIX_C_SOURCE può essere definito come un numero più basso, a seconda dello standard cui vogliamo aderire.

La macro _GNU_SOURCE invece può essere passata direttamente al compilatore.

$ gcc -D_GNU_SOURCE -o posix posix.o [Invio]

Tabella 8.1. Alcuni file definiti con unistd.h.

File Funzionalità
features.h Definisce le macro per la compatibilità.
bits/posix_opt.h Definisce le funzioni POSIX compatibili.
bits/types.h Definisce i tipi base.

2 Tabella 8.2. Alcuni file definiti con limits.h.

File Funzionalità
features.h Definisce le macro per la compatibilità.
bits/posix1_lim.h Definisce i limiti minimi garantiti.
bits/local_lim.h Definisce i limiti massimi garantiti.

Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome introduzione_1.html

[successivo] [precedente] [inizio] [fine] [indice generale]