【发布时间】:2012-09-14 01:10:14
【问题描述】:
Linux 2.6.39 引入了O_PATH 开放模式,它(粗略地说)根本不真正打开文件(即不创建打开文件描述),而只是提供一个文件描述符,它是一个句柄未开封的目标。它的主要用途是作为*at 函数(openat 等)的参数,它似乎适合作为Linux 以前缺少的POSIX 2008 O_SEARCH 功能的实现。但是,我一直找不到任何关于O_PATH 确切语义的好的文档。我有几个具体问题:
- Linux
O_PATH文件描述符上可以进行哪些操作? (只有*at函数?) -
O_PATH对非目录有用吗? - 文件描述符如何绑定到底层文件系统对象,如果它被移动、删除等会发生什么?
O_PATH文件描述符是否算作在取消链接最后一个链接时阻止对象被释放的引用?等等。
【问题讨论】:
-
我曾希望将 O_PATH 文件描述符用于通过
cap_get_fd和cap_set_fd管理的功能。但这不起作用,我收到了一个错误的文件描述符错误。太糟糕了。 -
@MvG:您是否尝试过在您打开的
O_PATH文件描述符的/proc/self/fd/条目上使用cap_get_file和cap_set_file?这似乎是所有内核无法让您直接使用O_PATH文件描述符的解决方法,并且proc条目永久与inode挂钩(即使它不是真正的符号链接它在目录列表中显示为一个)所以这种方法是无种族的,就像直接使用 fd 一样。 -
@R:由于在我的实际应用中,我有读取权限,所以我只是打开文件进行读取。但感谢您提供的信息。