C标准库和C POSIX库的区别

C标准库和C POSIX库的区别,c,posix,standard-library,C,Posix,Standard Library,我对“C标准库”和“C POSIX库”有点困惑,因为我发现,“C POSIX库”中定义的许多头文件也是“C标准库”的一部分 所以,我假设,“C标准库”是由ANSI C组织定义的库,在不同的平台上有不同的实现(类似于Win32/Unix),而“C POSIX库”只是在类似Unix的操作系统上“C标准库”的实现,对吗 但是“C POSIX lib”包含一些未在“C标准库”中指定的头,例如、和 以为例,我假设它的“C标准库”对应物是,那么如果我想在Linux上编写一个多线程程序,我应该包括哪个头文件,

我对“C标准库”和“C POSIX库”有点困惑,因为我发现,“C POSIX库”中定义的许多头文件也是“C标准库”的一部分

所以,我假设,“C标准库”是由ANSI C组织定义的库,在不同的平台上有不同的实现(类似于Win32/Unix),而“C POSIX库”只是在类似Unix的操作系统上“C标准库”的实现,对吗

但是“C POSIX lib”包含一些未在“C标准库”中指定的头,例如


为例,我假设它的“C标准库”对应物是
,那么如果我想在Linux上编写一个多线程程序,我应该包括哪个头文件,

POSIX是标准C库的超集,需要注意的是它遵从标准C库。如果C和POSIX发生冲突,C获胜

套接字、文件描述符、共享内存等都是POSIX的一部分,但不存在于C库中


pthread.h
用于POSIX线程和
threads.h
是C11的新头,是C库的一部分。也许pthread在将来的某个时候会被弃用,取而代之的是C线程,但是您可能还不能指望C11会得到广泛的部署。因此,如果您想要可移植性,您现在应该更喜欢pthreads。如果不考虑可移植性,并且您有C11线程可用,那么您可能应该使用这些线程。

POSIX 7 quote

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扩展:

ANSI C仍然存在,我认为:ANSI C是由ISO C、Cxx继承和扩展的。POSIX绝对遵守ANSI C。”


我们可以在Windows、类Unix的嵌入式设备上轻松编写ANSI C;但Cxx或POSIX可能有问题。

ANSI C自1990年C成为国际标准以来就已经过时了。从那时起,C由一个名为@Lundin的公司维护。ANSI C完全是胡说八道。ANSI C只不过是过时的。事实上,INCITS采用了C11作为ANSI标准,称为i“这是新的ANSI C标准。@Wiz这是一个国际标准,这是一个国际网站。考虑到这一点,从1990年开始谈论ANSI C就没有任何意义了。这就像我在这个网站上开始将C称为“SS C”一样“,因为我来自瑞典,瑞典标准被称为SS/ISO/IEC 9899。@Lundin,而人们一直认为‘ANSI C’意味着C89不能实现;尤其是2012年ANSI C采用C11时;因此,“ANSI C”表示C11。不管有多少人认为不是。@Wiz你没有抓住重点。对于国际观众来说,从1989年到1990年,当ISO标准发布时,谈论ANSI C才有意义。因此,非正式的C89和ANSI C已经成为同义词,即使ISO标准今天仍然被ANSI采用。但自1990年以来,美国以外的人对美国国家标准协会的活动就毫不关心了。例如,在和中都提到了signal.h。但我还是不明白。signal.h是标准C库的标题,还是仅在POSIX系统中可用?@KorayTugay最好的解决方法是IMO转到并搜索。需要注意的是,头文件存在于C标准库中,但POSIX扩展到了它。扩展名用
CX
标记。它说您必须添加一个define,但是扩展通常由默认的编译器标志启用。另一个选择是阅读。我不认为pthreads会被弃用而支持C11线程,特别是因为C11线程(除了一个不重要的细节)是pthreads的一个适当子集。@Alcott-为了给@Per Johansson添加一个很好的答案,据我所知,可以“考虑”,即C标准“假设最小”例如,OS功能假设系统上只运行一个进程,因此“不需要”(无定义)诸如
等标题(但是,我应该注意,据我所知,C的更高版本C11确实包含
定义)@PerJohansson您如何称呼POSIX C库中不是标准C库的部分?