【问题标题】:What is included in C Standard library?C标准库中包含什么?
【发布时间】:2015-05-23 15:05:29
【问题描述】:

我将举一个来自The GNU C Library文档的例子:

13.1 打开和关闭文件

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

我的问题是:

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

我们可以说 C 标准库 = Posix 函数 + C API 吗?我很困惑,因为 Wikipedia page for C Standard Library 不包括 unistd.h 但 GNU C 库文档包括它?

【问题讨论】:

  • C 标准也有一个关于 C 标准库的部分。查看 port70.net/~nsz/c/c11/n1570.pdf 了解 C11 标准。
  • 不,unistd.hfcntl.h 等不是标准 C 的一部分。
  • @YuHao 为什么将它们包含在 GNU C 库文档中?
  • C 是一种编程语言,POSIX 是一种操作系统规范/API 标准——在维恩图中,您会看到一些 C 实现支持 POSIX,但并非全部支持——也不是需要这样做——GNU C Lib 是在实现两者的交集,然后是更多

标签: c linux posix standards language-lawyer


【解决方案1】:

不,unistd.hfcntl.h 等不是标准 C。

通常,标准 C 不包括处理低级文件操作的函数。例如,fopenfreadfwrite 是标准 C 库的一部分。虽然 POSIX openreadwrite 函数不是标准 C。

【讨论】:

  • unix 有自己的 posix 实现还是必须由 c 库实现? (比如gnu c库..)
  • @KorayTugay 任何适用于 Unix 的 C 库都应该支持 POSIX,如果这是你的问题的话。
  • @KorayTugay,POSIX(Unix 的现代形式)是一种接口规范,而不是一种实现。 Linux 作为操作系统是 POSIX 实现。实现如何收集不同的特性由它自行决定。大多数 Linux 发行版使用 glibc 作为 C (amd POSIX) 库的实现,但有些没有。相同接口的另一种实现是例如 musl。
【解决方案2】:

据我所知,在C11 标准中,没有unistd.hfcntl.h。因此,严格来说,它们不属于C 标准。

说到实现部分,GNU C library (glibc) 就是其中之一。来自维基页面

glibc 提供单一 UNIX 规范、POSIX(1c、1d 和 1j)所需的功能以及 ISO C11、ISO C99、Berkeley Unix (BSD) 接口、System V 接口定义所需的一些功能(SVID) 和 X/Open 可移植性指南 (XPG),第 4.2 版,包含所有 XSI(X/Open 系统接口)兼容系统通用的扩展以及所有 X/Open UNIX 扩展。

此外,glibc 还提供了在开发 GNU 时被认为有用或必要的扩展。

因此,作为 POSIX 标准的一部分,它们在 glibc 中可用。

参考:查看C11标准draft version here

【讨论】:

  • 能否给个参考,我也查一下?
  • 为什么 GNU C 库将它们包含在文档中?
  • 谢谢,我会接受的。我以为linux本身自带posix的实现?
猜你喜欢
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多