Linux内核:获得符号链接背后的真实路径

大卫

我正在处理一些Linux内核的东西,并且我有一个名为/ dev / blah /的虚假路径,无论该路径指向/ dev / block / real_device

问题是lookup_bdev将无法遵循符号链接,因此我想通过获取真实路径(/ dev / block / real_device)预先按摩路径,因此我可以将其传递给lookup_bdev,以便它成功返回而不是返回错误。

或任何其他可以在给定初始路径的情况下正确检索block_device信息的内核调用。

谢谢

迈奥

为此使用VFS层(特别是dcache / nameidata)。

#include <linux/namei.h>
#include <linux/dcache.h>

...

struct path path;
char buf[256];
char* ptr;
int err = kern_path("/dev/disk/by-id/dm-name-lkdevel-root", 
                    LOOKUP_FOLLOW, &path);

if(!err) {
    ptr = d_path(&path, buf, 256);        

    if(!IS_ERR(ptr)) {
        /* ptr contains real path */
    }
}

已在Vanilla Linux 3.12上进行了测试

请注意,d_path()对于特殊的文件系统,可能会返回奇怪的结果,并将(deleted)后缀附加到已删除的文件中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章