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年4月19日
POSIX.1-2016 IEEE Std 1003.1-2016 2016年9月30日

什么是POSIX?

POSIX代表“ 可移植操作系统接口 ”,它定义了一组标准,以提供不同计算平台之间的兼容性。该标准的当前版本是IEEE 1003.1 2016,可以从OpenGroup POSIX规范访问。以前的版本包括POSIX 2004POSIX 1997 。 POSIX 2016版基本上是POSIX 2008和勘误表(也有POSIX 2013版本)。

POSIX为类UNIX操作系统和其他操作系统定义了各种工具接口,命令和API。

以下被认为是在POSIX标准化的范围内:

  • 系统接口(函数,宏和外部变量)
  • 命令解释器,或Shell( sh实用程序)
  • 公用事业(如更多ls

在POSIX范围之外:

  • DBMS接口
  • 图形界面
  • 二进制代码可移植性

你好,世界

一个简单的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 ,那么您可以使用c99 make 将代码编译为程序hello 。例如,在严格遵守POSIX的模式下,理论上您可以使用以下命令编译和运行程序:

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

大多数实际的make 实现将使用不同的C编译器(可能是cc ,也许是gccclangxlc 或其他名称),并且许多将使用更多选项到编译器。很显然,你可以简单地键入命令make 直接执行的命令行。