POSIXAan de slag met POSIX


versies

Versie Standaard Jaar van uitgave
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 (ook bekend als " Basisspecificaties, uitgave 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

Wat is POSIX?

POSIX staat voor " Portable Operating System Interface " en definieert een reeks normen voor compatibiliteit tussen verschillende computerplatforms. De huidige versie van de standaard is IEEE 1003.1 2016 en is toegankelijk via de POSIX-specificatie van OpenGroup. Eerdere versies omvatten POSIX 2004 en POSIX 1997 . De POSIX 2016-editie is in wezen POSIX 2008 plus errata (er was ook een POSIX 2013-release).

POSIX definieert verschillende gereedschapsinterfaces, opdrachten en API's voor UNIX-achtige besturingssystemen en andere.

Het volgende wordt geacht binnen het bereik van POSIX-standaardisatie te vallen:

  • Systeeminterface (functies, macro's en externe variabelen)
  • Command interpreter of Shell (het hulpprogramma sh )
  • Hulpprogramma's (zoals meer , cat , ls )

Buiten het bereik van POSIX:

  • DBMS-interfaces
  • Grafische interfaces
  • Binaire codeportabiliteit

Hallo Wereld

Een eenvoudig Hello, World programma zonder foutcontrole:

#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; 
}
 

En met foutcontrole:

#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; 
}
 

Compileren en uitvoeren

Als de hierboven getoonde code (beide versies) is opgeslagen in het bestand hello.c , dan kunt u de code compileren in een programma hello met behulp van c99 of make . In een strikt POSIX-compatibele modus kunt u het programma in theorie bijvoorbeeld compileren en uitvoeren met:

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

De meeste werkelijke make -implementaties zal een andere C-compiler (misschien gebruiken cc , misschien gcc , clang , xlc of een andere naam), en velen zullen meer opties gebruiken om de compiler. Het is duidelijk, kan je typt de opdracht die make uitvoert rechtstreeks op de opdrachtregel.