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

因此,我假设"C标准库"是由ANSI C组织定义的库,并且在不同的平台(类似Win32/Unix)上有不同的实现,而"C POSIX lib"只是"C标准库"在类Unix操作系统上的一个实现,对吗?

但是"C POSIX lib"包含一些在"C标准库"中没有指定的头,例如<sys/types.h><sys/wait.h><pthread.h>.

<pthread.h>为例,我假设它的"C标准库"对应的是<threads.h>,那么如果我想在Linux上编写多线程程序,我应该包括哪个头文件,<pthread.h>还是<threads.h>

推荐答案

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

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

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

C++相关问答推荐

如何避免使用相对路径包含在c中

变量的const视图是否定义良好?

为什么listen()(在调用accept()之前)足以让应用程序完成3次握手?

使用SWI—Prolog的qsave_program生成二进制文件有什么好处?'

如何使用Python C API实现多线程程序?

为什么C语言允许你使用var =(struct NAME){

为什么GCC C23中的关键字FALSE不是整数常量表达式?

为什么该函数不将参数值保存到数据 struct 中?

非正规化边缘毛刺

GCC创建应用于移动项的单独位掩码的目的是什么?

S将C语言宏定义为自身的目的是什么?(在glibc标题中看到)

为什么中断函数会以这种方式影响数组?

如何只获取字符串的第一个单词,然后将其与c中的另一个单词进行比较?

S和查尔有什么不同[1]?

MacOS下C++的无阻塞键盘阅读

不使用任何预定义的C函数进行逐位运算

如何在C中用bool进行文件I/O?

向左移位3如何得到以字节为单位的位数?

正在try 理解C++中的`正在释放的指针未被分配‘错误

If语句默认为true