C标准库包括哪些内容?

3

我将从The GNU C Library文档中给出一个例子:

13.1 打开和关闭文件

本节描述了使用文件描述符打开和关闭文件的基本操作。open和creat函数在头文件fcntl.h中声明,而close在unistd.h中声明。

我的问题是:

unistd.hfcntl.h可以被认为是标准C吗?据我所知,它们应该是Posix标准的一部分吗?

我们可以说C标准库= Posix函数 + C API吗?我感到困惑,因为C标准库的维基百科页面不包括unistd.h,但GNU C库文档包括它?


1
C标准还有一节关于C标准库的内容。请查看http://port70.net/~nsz/c/c11/n1570.pdf获取C11标准。 - Banex
3
不,unistd.hfcntl.h等不是标准C的一部分。 - Yu Hao
@YuHao 为什么它们被包含在GNU C库文档中? - Koray Tugay
2
C是一种编程语言,POSIX是操作系统规范/ API标准--在一个Venn图中,您会看到一些C实现支持POSIX,但并非所有实现都支持--也不需要它们这样做--GNU C Lib在实现两者以及更多方面存在交集。 - Soren
2个回答

4

不,unistd.hfcntl.h等都不是标准的C语言库。

一般来说,标准的C语言库中不包含处理低级文件操作的函数。例如,fopenfreadfwrite是标准C库的一部分。而POSIX的openreadwrite函数则不属于标准C。


Unix自带POSIX实现还是必须由C库实现(例如GNU C库)? - Koray Tugay
@KorayTugay 如果你的问题是关于Unix上的C库,那么任何一个都应该支持POSIX。 - Yu Hao
2
@KorayTugay,POSIX(Unix的现代形式)是一个接口规范而不是实现。作为操作系统的Linux是一个POSIX实现。如何收集不同功能取决于其自己。大多数Linux发行版使用glibc作为C(amd POSIX)库的实现,但有些则不使用。另一个相同接口的实现例如musl。 - Jens Gustedt

3
据我所见,在C11标准中,不存在unistd.h和fcntl.h。因此严格来说,它们不是C标准的一部分。当涉及到实现部分时,GNU C库(glibc)是其中之一。从维基页面上可以看到,glibc提供了单一UNIX规范、POSIX(1c、1d和1j)以及ISO C11、ISO C99、伯克利Unix(BSD)接口、系统V接口定义(SVID)和X/Open可移植性指南(XPG)4.2版所需的功能,以及所有XSI(X/Open系统接口)兼容系统的所有扩展和所有X/Open UNIX扩展。此外,glibc还提供了在开发GNU时被认为有用或必要的扩展。因此,作为POSIX标准的一部分,它们在glibc中可用。

参考文献:查看此处的草案版本,了解关于C11标准的内容。


请问您能提供一个参考链接吗?这样我也可以进行核对。 - Koray Tugay
为什么GNU C库在文档中包含它们? - Koray Tugay
谢谢,我会尽快接受。我以为Linux本身就带有POSIX的实现? - Koray Tugay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接