【问题标题】:Why are the mkdir() and rmdir() POSIX system calls in different header files?为什么 mkdir() 和 rmdir() POSIX 系统调用在不同的头文件中?
【发布时间】:2019-03-18 12:59:57
【问题描述】:

mkdir() 位于<sys/stat.h>,而 rmdir() 位于<unistd.h>。将它们放在同一个头文件中不是更有意义吗?

【问题讨论】:

  • “历史原因”
  • 为什么“through”拼写为“ough”,而“flew”拼写为“ew”?
  • 无论如何,这与改变无关。这些头文件已经存在了很长时间,如果它们被更改,它将阻止成千上万的程序编译。忍受它。
  • 请解释您将如何使用您的问题的答案——您能想到的任何答案。
  • @KubaOber 为了更容易记住并满足我的好奇心。

标签: c linux posix header-files system-calls


【解决方案1】:

原因是,使用mkdir(2),您在第二个参数中指定了权限

  int mkdir(const char *pathname, mode_t mode);

这些模式标志和mode_t 类型在sys/stat.h 中定义(至少通过在我的系统上间接包含bits/stat.hbits/types.h),因此在那里定义mkdir() 似乎也是合适的。否则,包含unistd.h 会导致错误,因为mode_t 的类型在那里是未知的。

相比之下,rmdir(2) 除了文件名之外不接受任何参数,因此它可以保留在unistd.h 中,因为没有其他依赖项。

【讨论】:

  • 仅供参考,名称以bits/ 开头的标头不能直接使用。例如,如果您查看bits/stat.h,您会看到它以使用sys/stat.h 而不是直接包含它的明确警告开头。 POSIX 标准规定这些标志和类型将由 sys/stat.h somehow 定义; GNU libc 将所需的定义拆分到几个头文件中,以便尽可能多的sys/stat.h 可以在所有支持的架构之间共享。其他 C 库也会将其拆分,但方式不完全相同。
猜你喜欢
  • 2021-06-21
  • 2013-09-04
  • 2021-10-07
  • 2012-05-04
  • 2021-04-28
  • 1970-01-01
  • 2020-12-05
  • 2011-02-12
  • 2014-09-28
相关资源
最近更新 更多