POSIXIniziare con POSIX


Versioni

Versione Standard Anno di pubblicazione
POSIX.1 IEEE Std 1003.1-1988 1988/01/01
POSIX.1b IEEE Std 1003.1b-1993 1993/01/01
POSIX.1c IEEE Std 1003.1c-1995 1995-01-01
POSIX.2 IEEE Std 1003.2-1992 1992/01/01
POSIX.1-2001 IEEE Std 1003.1-2001 2001/12/06
POSIX.1-2004 IEEE Std 1003.1-2004 2004-01-01
POSIX.1-2008 IEEE Std 1003.1-2008 (alias " Base Specifications, Issue 7 ") 2008-12-01
POSIX.1-2013 IEEE Std 1003.1-2013 2013/04/19
POSIX.1-2016 IEEE Std 1003.1-2016 2016/09/30

Cos'è POSIX?

POSIX è l'acronimo di " Portable Operating System Interface " e definisce una serie di standard per garantire la compatibilità tra diverse piattaforme di elaborazione. La versione attuale dello standard è IEEE 1003.1 2016 e si può accedere dalla specifica POSIX di OpenGroup. Le versioni precedenti includono POSIX 2004 e POSIX 1997 . L'edizione POSIX 2016 è essenzialmente POSIX 2008 più errata (c'era anche una versione POSIX 2013).

POSIX definisce vari strumenti interfacce, comandi e API per sistemi operativi simili a UNIX e altri.

Quanto segue sono considerati nell'ambito della standardizzazione POSIX:

  • Interfaccia di sistema (funzioni, macro e variabili esterne)
  • Interprete dei comandi o Shell (l'utilità sh )
  • Utilità (come più , cat , ls )

Fuori dall'ambito POSIX:

  • Interfacce DBMS
  • Interfacce grafiche
  • Portabilità del codice binario

Ciao mondo

Un semplice programma Hello, World senza controllo degli errori:

#include <unistd.h> /* For write() and STDOUT_FILENO */
#include <stdlib.h> /* For EXIT_SUCCESS and EXIT_FAILURE */

int main(void) {
        char hello[] = "Hello, World\n";
        
        /* Attempt to write `hello` to standard output file */
        write(STDOUT_FILENO, hello, sizeof(hello) - 1);

        return EXIT_SUCCESS; 
}
 

E con il controllo degli errori:

#include <unistd.h> /* For write() and STDOUT_FILENO */
#include <stdlib.h> /* For EXIT_SUCCESS and EXIT_FAILURE */

int main(void) {
        char hello[] = "Hello, World\n";
        ssize_t ret = 0;
        
        /* Attempt to write `hello` to standard output file */
        ret = write(STDOUT_FILENO, hello, sizeof(hello) - 1);

        if (ret == -1) {
                /* write() failed. */
                return EXIT_FAILURE;
        } else if (ret != sizeof(hello) - 1) {
                /* Not all bytes of `hello` were written. */
                return EXIT_FAILURE;
        }

        return EXIT_SUCCESS; 
}
 

Compilare e correre

Se il codice mostrato sopra (o la versione) è memorizzato nel file hello.c , allora puoi compilare il codice in un programma hello usando c99 o make . Ad esempio, in modalità strettamente conforme a POSIX, è possibile in teoria compilare ed eseguire il programma utilizzando:

$ make hello
c99 -o hello hello.c
$ ./hello
Hello, World
$
 

Le implementazioni make più effettive useranno un compilatore C diverso (forse cc , forse gcc , clang , xlc o qualche altro nome), e molti useranno più opzioni per il compilatore. Chiaramente, si può semplicemente digitare il comando che make esegue direttamente sulla riga di comando.