在我的理解中,open和close系统调用似乎非常相关。
- 两者都处理文件
- 在大多数所有 unix 风格中都可用(?任何不具有它们的 unix 存在吗?)
因此,我希望在头文件中都声明它们。/usr/include/unistd.h
但是-奇怪的是-那里只有“关闭”,但没有声明“打开”(在我的 4.17 linux 内核系统上)?
开放系统调用的遗漏unistd.h
似乎在阅读The Open Group Base Specifications Issue 7, 2018时得到证实
在“声明”段中说明
以下应声明为函数,也可以定义为宏。应提供功能原型。
整数访问(const char *,int);
无符号警报(无符号);
int chdir(const char *);
int chown(const char *,> uid_t, gid_t);
整数关闭(整数);
[...更多声明,但没有“开放”]
然后-再次对我来说-该文件/usr/include/asm/unistd_64.h
包含该行
#define __NR_open 2
好像 unistd.h 仍然有点关心“打开文件”?
背景是你需要
无论如何,为了获得
open()
相关的标志,应该有机会不超过需要的污染名称空间。如果
open()
将在 中unistd.h
,则此文件将需要,#include
fcntl.h
并且不希望将其作为默认值。文件 unistd_64.h 是一个非官方的供应商内部包含文件,该文件中的内容不是 POSIX 标准的主题。