在我的理解中打开和关闭系统调用似乎非常相关。
- 两者都处理文件
- 在大多数 UNIX 风格中都可用(?存在不具有这些功能的 UNIX 吗?)
因此我希望发现他们宣布两个都在/usr/include/unistd.h
头文件中。然而,奇怪的是,那里只有“关闭”,但没有声明“打开”(在我的 4.17 Linux 内核系统上)?
的遗漏打开系统调用unistd.h
似乎已确认阅读The Open Group 基本规范第 7 期,2018 年版
其中在“声明”段落中讲述
以下应声明为函数,也可以定义为宏。应提供功能原型。
int 访问(const char *, int);
无符号警报(unsigned);
int chdir(const char *);
int chown(const char *,> uid_t, gid_t);
int 关闭(int);
[...更多声明,但没有“开放”]
然后-再次对我来说很奇怪-该文件/usr/include/asm/unistd_64.h
包含该行
#define __NR_open 2
好像 unistd.h 仍然关心“打开文件”?
答案1
背景是你需要
#include <fcntl.h>
无论如何,为了获得open()
相关的标志,并且应该有机会不污染名称空间超过需要的程度。
如果open()
位于 中unistd.h
,则需要此文件#include
fcntl.h
,但默认情况下不需要此文件。
文件 unistd_64.h 是一个非官方的供应商内部包含文件,该文件中的内容不属于 POSIX 标准的主题。