我目前正在编写Linux内核模块(第一次)。
我正在尝试使用stat函数。我知道常规导入无法在内核代码中正常工作,因此我导入了等效导入(这就是我的想法...):
#include <linux/stat.h>
#include <linux/errno.h>
#include <linux/unistd.h>
我没有直接收到有关导入的任何错误,但是我收到以下消息:
分别针对这两行:
int ret = stat(pathname, statbuf);
和
errno = ENOENT;
欢迎任何帮助。
谢谢。
PS:我正在研究Kali 4.9.0-kali4-amd64,但是我正在尝试编写一些通用的东西,可以在多个Linux版本上使用。
答案 0 :(得分:-1)
首先,最有可能是不想进行统计,无论实现的是什么。在最坏的情况下,您应该具有“结构文件”对象,或者直接指向一个指向您感兴趣的文件的指针。然后,在极少数情况下,您需要获取stat提供的信息,可以使用适当的例程这需要文件或牙科。然后,您可以继续对已经具有指针的文件进行操作。仅执行统计信息然后决定要做什么通常是一个安全性或可靠性问题:在您决定打开目标路径,它可能是一个完全不同的文件-有人可能在统计调用时删除了该文件,并植入了一个新文件。这是标准Bug类的一部分:检查时间使用时间。
第二,内核中没有'errno'变量,而您尝试使用它的事实强烈表明您是一个非常初级的程序员。因此,我怀疑您暂时不应该使用内核。
您可能还想阅读这篇论文:http://www.watson.org/~robert/2007woot/2007usenixwoot-exploitingconcurrency.pdf
那么,您到底想实现什么?