POSIXНачало работы с POSIX


Версии

Версия стандарт Год выпуска
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 (« Базовые спецификации, выпуск 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

Что такое POSIX?

POSIX означает « Portable Operating System Interface » и определяет набор стандартов для обеспечения совместимости между различными вычислительными платформами. Текущей версией стандарта является IEEE 1003.1 2016, и к нему можно получить доступ из спецификации OpenGroup POSIX . Предыдущие версии включают POSIX 2004 и POSIX 1997 . Версия POSIX 2016 - это, по сути, POSIX 2008 плюс исправления (также был выпущен POSIX 2013).

POSIX определяет различные инструменты интерфейсов, команд и API для UNIX-подобных операционных систем и других.

В рамках стандартизации POSIX рассматриваются следующие:

  • Системный интерфейс (функции, макросы и внешние переменные)
  • Командный интерпретатор или Shell (утилита sh )
  • Утилиты (например, больше , cat , ls )

Вне области POSIX:

  • Интерфейсы СУБД
  • Графические интерфейсы
  • Переносимость двоичного кода

Привет, мир

Простая программа Hello, World без проверки ошибок:

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

И с проверкой ошибок:

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

Компиляция и запуск

Если код, показанный выше (любая версия), хранится в файле hello.c , вы можете скомпилировать код в hello программы, используя либо c99 либо make . Например, в строго совместимом с POSIX режиме вы можете теоретически компилировать и запускать программу, используя:

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

Большинство реальных make реализации будут использовать другой компилятор (возможно cc , возможно , gcc , clang , xlc или другое имя), и многие будут использовать больше возможностей для компилятора. Очевидно, что вы можете просто ввести команду , которая make выполняет непосредственно в командной строке.