为什么 /usr/include/unistd.h 中没有“open”系统调用? (但“接近”是)

为什么 /usr/include/unistd.h 中没有“open”系统调用? (但“接近”是)

在我的理解中打开关闭系统调用似乎非常相关。

  • 两者都处理文件
  • 在大多数 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 标准的主题。

相关内容