在最新的内核中,我使用以下代码来操作符号链接文件的索引节点:
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
时则不执行。另外,您将需要对该文件具有读取权限才能打开它。但是否则,它应该允许您执行所需的操作。