我对“C标准库”和“C POSIX库”有点困惑,因为我发现,“C POSIX库”中定义的许多头文件也是“C标准库”的一部分。
所以,我假设,“C标准库”是ANSI C组织定义的库,在不同的平台上有不同的实现(Win32/Unix-like),而“C POSIX库”只是“C标准库”在Unix-like操作系统上的实现,对吗?
但是“C POSIX lib”包含了一些在“C标准lib”中没有指定的头文件,例如<sys/types.h>
、<sys/wait.h>
和<pthread.h>
。
以<pthread.h>
为例,我假设它的“C标准库”对应物是<threads.h>
,那么如果我想在Linux上编写一个多线程程序,我应该包括哪个头文件,<pthread.h>
还是<threads.h>
?
3条答案
按热度按时间1sbrub3j1#
POSIX是标准C库的超集,需要注意的是,它遵从标准C库。如果C和POSIX发生冲突,C将获胜。
套接字、文件描述符、共享内存等都是POSIX的一部分,但不存在于C库中。
pthread.h
用于POSIX线程,threads.h
是C11的新头文件,是C库的一部分。也许pthreads在将来的某个时候会被弃用,而C线程会被弃用,但是你可能还不能指望C11会得到广泛的部署。因此,如果你想要可移植性,你现在应该更喜欢pthreads。如果可移植性不是问题,并且您有可用的C11线程,那么您可能应该使用这些线程。rjee0c152#
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,编程语言- C,包括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标准的扩展位置(见代码)。本卷POSIX.1-2008和ISO C标准之间的任何冲突都是无意的。
我在下面列出了一些主要的API扩展:我从来没有真正理解过:POSIX是什么?
dauxcl2d3#
ANSI C还活着,我想:ANSI C是由ISO C,Cxx继承和扩展的。POSIX已经完全服从ANSI C。
可以在Windows、类Unix、嵌入式设备上轻松编写ANSI C语言;但是Cxx或POSIX可能有问题。