【发布时间】:2017-10-07 00:08:46
【问题描述】:
我正在尝试获取内核模块中的所有挂载点。下面是我想出的。由于strcat,它会出现段错误。这是获取挂载点的正确方法吗?这行得通吗?如果是这样,我该如何修复段错误?如果没有,如何在 linux 内核模块中获取挂载点?
我尝试过cycle the whole namespace looking for mountpoint roots that match,但它是从 2003 年开始的,内核发生了很大变化,所以它基本上没用。还尝试了get filesystem mount point in kernel module,但它又是从 2012 年开始的,所以它已经过时了。
static int __init misc_init(void)
{
struct path path;
struct dentry *thedentry;
struct dentry *curdentry;
kern_path("/", LOOKUP_FOLLOW, &path);
thedentry = path.dentry;
list_for_each_entry(curdentry, &thedentry->d_subdirs, d_child)
{
kern_path(strncat("/", curdentry->d_name.name, strlen(curdentry->d_name.name)), LOOKUP_FOLLOW, &path);
if (path_is_mountpoint(&path))
{
printk("%s: is a mountpoint", curdentry->d_name.name);
}
else
printk("%s: is not a mountpoint", curdentry->d_name.name);
}
return 0;
}
【问题讨论】:
-
你读过
man strncat吗?你会感到惊讶。 -
是的,我有。我试过 strjoin、strlcat、strncat、strcat。
-
... 而
strlen(curdentry->d_name.name)),也毫无意义 -
那么你知道你的
strncat有什么问题吗?提示:第一个参数应该是什么? -
修复了仍然坏的问题。
标签: c linux linux-kernel kernel-module