linux - 为什么open函数在linux下没有O_SEARCH标志?

标签 linux unix

假设我需要获取只有执行(或搜索)权限的文件(或目录)的文件描述符。

X/Open 规范为 open() 函数定义了一个 O_SEARCH 标志。参见 http://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html

但是,Linux 没有。只有 3 个可用标志(O_RDONLY、O_WRONLY 和 O_RDWR)。参见 http://man7.org/linux/man-pages/man2/open.2.html

为什么?以及如何获取只有搜索权限的目录的 fd?

谢谢

最佳答案

事实证明 Linux 还不支持这个标志,如 W. Richard Stevens Stephen A. Rago 的书“UNIX 环境中的高级编程”中所述,您可以在这里查看 Link to the book on google books

实际上,该标志在 POSIX 中定义,在标准 C 库中实现(在本例中为 glibc,这就是为什么您在 man 3 open 下找到它的原因)但未在 Linux 内核中实现(因此在 man 2 open 下找不到).

编辑 1: 由于我们在 Linux 下使用 GNU,因此它包含 Linux 的特定 header ,以便能够进行 Linux 可行的适当系统调用(在这种情况下,除了 fcntl.h 之外,它还包含 fcntl-linux.h)。

编辑 2:错误票 https://sourceware.org/bugzilla/show_bug.cgi?id=18228

如果我错了,请纠正我!

关于linux - 为什么open函数在linux下没有O_SEARCH标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44159325/

相关文章:

linux - 使用 diff 比较目录时,有没有办法从输出中排除某些文件差异?

linux - 如何在shell脚本中使用键、值对处理文件

python - 无法运行 Python 脚本 CRON : Import Error: No Module Named Tweepy

linux - 如果条件发生使用 awk 或 sed 删除一行

linux - 添加目录中的文件后,如何使用 inotify-tools 向我发送电子邮件?

c - 我必须向服务器发送哪些参数?

C++ Unix 多线程 "under the hood"会发生什么?

linux - sudo模式和内核模式有区别吗?

mysql - 错误 2002 (HY000) : Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) help me

c - 我想在不使用终端的情况下运行程序 - 这可能吗?如何?