【发布时间】:2019-10-21 08:01:17
【问题描述】:
在最新的内核中,我使用以下代码来操作符号链接文件的 inode:
file = filp_open(filename, O_PATH | O_NOFOLLOW, 0);
如果我不添加 O_PATH,filp_open 将失败并显示 -ELOOP。
在 Linux 内核 2.6.32 上,O_PATH 不可用,我应该改用什么?
【问题讨论】:
在最新的内核中,我使用以下代码来操作符号链接文件的 inode:
file = filp_open(filename, O_PATH | O_NOFOLLOW, 0);
如果我不添加 O_PATH,filp_open 将失败并显示 -ELOOP。
在 Linux 内核 2.6.32 上,O_PATH 不可用,我应该改用什么?
【问题讨论】:
我认为没有直接的等价物,因为O_PATH 具有非常具体的语义,文件本身没有打开。我认为最接近的方法是以安全的方式实际打开文件,即使用O_RDONLY。是的,这在语义和物理上并不完全相同。当一个文件被实际打开时,内核中会执行更多的工作,而使用O_PATH 时不会执行这些工作。此外,您需要对文件具有读取权限才能打开它。但除此之外,它应该允许你做你需要的。
【讨论】: