我正在研究一些Linux内核的东西,我有一个名为/ dev / blah的虚假路径/无论指向/ dev / block / real_device
问题是lookup_bdev将无法遵循符号链接,因此我想通过获取真实路径(/ dev / block / real_device)来预先按下路径,这样我就可以将其移交给lookup_bdev,以便它成功返回错误。
或者在给定初始路径的情况下正确检索block_device信息的任何其他内核调用。
由于
答案 0 :(得分:3)
为此使用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)
后缀附加到已删除的文件中。
答案 1 :(得分:0)
尝试使用sys_readlink()系统调用。