【发布时间】:2017-01-25 11:41:43
【问题描述】:
我有一个关于在 linux 内核模块中创建目录的问题。
我想要什么:在内核模块中创建一个目录。
这是我的实际代码:
struct file *fp = (struct file *) NULL;
fp = filp_open("/home/testdir", O_DIRECTORY|O_CREAT, S_IRUSR);
但它会创建一个文件而不是目录。
我尝试在没有标志“O_DIRECTORY”的情况下使用与上面相同的代码:
struct file *fp = (struct file *) NULL;
fp = filp_open("/home/testdir", O_CREAT, S_IRUSR);
而且结果和之前的结果差不多。
我不明白这种行为。我做错了什么?
编辑 1: 我在 Raspberry PI,Raspbian,内核版本上编码:4.4.43-v7
【问题讨论】:
-
也许
O_DIRECTORY的意思是创建任何父目录,你试过"home/testdir/delete-this"吗?如果它有效,那么您使用了错误的功能。哦,这只是一个疯狂的猜测。我不知道filp_open()是什么或做什么。 -
这不起作用,但感谢您的尝试!它不会创建目录“testdir”或“delete-this”
-
你为什么不用
mkdir()?这个调用应该失败,你不检查返回值吗? "If pathname is not a directory, cause the open to fail."。顺便说一句,这对强制转换NULL是没有用的,如果你在之后影响它,那么将你的变量初始化为NULL也是没有用的。这是不好的做法。 -
@Stargateur :我使用标志“O_CREAT”来创建目录。手册页说:“如果文件不存在,它将被创建。”。并感谢您为不良做法提供提示!
-
@Stargateur:如何在内核模块中使用“mkdir()”?我需要哪些内容?
标签: c linux linux-kernel kernel-module