所以,我猜想,"C标准库"是由ANSI C组织定义的库,在不同平台(Win32/类Unix)上有不同的实现,而"C POSIX库"只是Unix-like操作系统上"C标准库"的一个实现,对吗?
但是,"C POSIX库"包含了一些在"C标准库"中没有指定的头文件,比如、和。
以为例,我假设它的"C标准库"对应文件是,那么如果我想在Linux上编写一个多线程程序,我应该包含哪个头文件,还是?
POSIX是标准C库的一个超集,值得注意的是它会参考标准C库。如果C和POSIX发生冲突,C会胜出。
套接字、文件描述符、共享内存等都是POSIX的一部分,但在C库中并不存在。
pthread.h
用于POSIX线程,而threads.h
是C11的新头文件,是C库的一部分。也许在未来,pthread会被废弃,取而代之的是C11的线程,然而你不能保证C11已经广泛部署。因此,如果你想要可移植性,现在应该优先选择pthread。如果可移植性不是问题,并且你有C11线程可用,你应该使用C11线程。
CX
。它说你必须添加一个定义,但通常扩展是通过默认编译器标志启用的。另一个选择是阅读 C 标准。 - Per JohanssonC POSIX 库是针对 POSIX 系统的 C 标准库规范。它与 ANSI C 标准同时开发。为了使 POSIX 兼容标准 C,做出了一些努力;POSIX 包含了比标准 C 更多的函数。
POSIX 7引用
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap01.html#tag_14_01
1.1 与其他正式标准的关系
我们非常注意确保这个 POSIX.1-2008 版本与以下标准完全一致:
ISO C (1999) ISO/IEC 9899:1999,包括 ISO/IEC 9899:1999/Cor.1:2001(E)、ISO/IEC 9899:1999/Cor.2:2004(E) 和 ISO/IEC 9899:1999/Cor.3。
部分 ISO/IEC 9899:1999 标准(以下简称 ISO C 标准)被引用来描述此 POSIX.1-2008 版本也要求的需求。在这个 POSIX.1-2008 版本中包括一些在 ISO C 标准中的函数和头文件版本;在这种情况下,适当地添加 CX 标记以显示 ISO C 标准已扩展的部分(请参见 Codes)。任何 POSIX.1-2008 版本与 ISO C 标准之间的冲突都是无意的。
我在这里列出了一些主要的 API 扩展:我从未真正理解:什么是 POSIX?
ANSI C仍然活着,我认为:ANSI C被ISO C、Cxx继承和扩展。POSIX一直在完全遵守ANSI C。
我们可以轻松地在Windows、类Unix系统、嵌入式设备上编写ANSI C;但是Cxx或POSIX可能会有问题。