unistd.h和Unix-like系统使用的标准的版本
在C和C++编程语言中,unistd.h是头文件的名称,它提供对POSIX操作系统API的访问。
unistd.h "是Unix(-like)系统的标准头文件,在Windows上不可用。
<unistd. h>头定义了各种符号常数和类型,并声明了各种函数。
在类Unix系统中,unistd.h定义的接口通常主要由系统调用包装函数组成,如fork、pipe和I/O原语。
像Cygwin和MinGW这样的Unix兼容层也提供它们自己的unistd版本。
事实上,这些系统在提供unistd的同时还提供了翻译库,以Win32函数的形式实现其功能。
例如,在Cygwin中,一个头文件可以在include中找到,它在include/sys中又包含了一个同名的文件。
并非所有的东西都在这里定义,但有些定义是通过引用GNU C标准库头文件来完成的,这些头文件提供了size_t等类型。
因此,unistd.h只是一个通用定义的适应层,它可能是基于已经存在的系统和编译器的特定定义。
这有一个普遍的好处,即不需要定义一套可能同时存在的头文件,而是建立在相同的根基上,由于这个原因,在综合使用的情况下会引起更少的关注。
更多详情请查阅opengroup.。
unistd.h头文件中包含了Unix使用的POSIX版本和X/open版本的信息:
Name | Macro | Standard |
POSIX.1-1988 | _POSIX_VERSION = 198808L | |
POSIX.1-1990 | _POSIX_VERSION = 199009L | ISO/IEC 9945-1:1990 |
POSIX.2 | _POSIX2_C_VERSION = 199209L | ISO/IEC 9945-2:1993 |
POSIX.1b-1993 | _POSIX_VERSION = 199309L | IEEE 1003.1b-1993 |
POSIX.1-1996 | _POSIX_VERSION = 199506L | IEEE 1003.1-1996 |
POSIX.1-2001 | _POSIX_VERSION = 200112L | IEEE 1003.1-2001 |
POSIX.1-2008 | _POSIX_VERSION = 200809L | IEEE 1003.1-2008 |
XPG3 | _XOPEN_VERSION = 3 | X/Open Portability Guide 3 (1989) |
XPG4 | _XOPEN_VERSION = 4 | X/Open Portability Guide 4 (1992) |
SUS | _XOPEN_VERSION = 4 && _XOPEN_UNIX | X/Open Single UNIX Specification (UNIX95) |
SUSv2 | _XOPEN_VERSION = 500 | X/Open Single UNIX Specification, Version 2 (UNIX98) |
SUSv3 | _XOPEN_VERSION = 600 | Open Group Single UNIX Specification, Version 3 (UNIX03) |
SUSv4 | _XOPEN_VERSION = 700 | Open Group Single UNIX Specification, Version 4 |
通过引用unistd.h头文件,我们可以查阅Unix支持的POSIX标准版本:
- posix.c
-
-
-
- #include <unistd.h>
-
- #include <stdio.h>
-
- int main()
-
- {
-
- printf("POSIX Version:%%ld.
", _POSIX_VERSION);
-
- printf("POSIX2 Version:%%ld.
", _POSIX2_C_VERSION );
-
- printf("X/Open Version:%%d.
", _XOPEN_VERSION);
-
-
-
- return 0;
-
- }
-
-
- $ gcc -o posix posix.cpp
- $ ./posix
-
- POSIX Version:200809.
-
- POSIX2 Version:200809.
-
- X/Open Version:700.
X/Open可移植性指南是一个UNIX系统的标准,最初由X/Open有限公司出版。它以AT&T System V接口定义为基础,比POSIX的范围更广,后者只关注直接的操作系统接口。
参考: