我正在尝试在我的玩具文件系统模块中调用 ioctl 函数。我只是想让这个 ioctl 设置一个由调用者传入的变量。到目前为止,我已经建立了允许我进行 ioctl 调用的 ioctl 基础设施。我的模块中有这个函数来处理 ioctl。
int ospfs_ioctl(struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long arg)
{
if(cmd == OSPFSIOCRASH)
{
eprintk("crash: %ld\n", arg);
return 0;
}
else
return -ENOTTY;
}
我的测试功能看起来像这样。
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#define OSPFSIOCRASH 42
int main()
{
int fd = open("/tmp/cs111/lab3-thief/test/hello.txt", O_RDWR);
printf("ioctl call: %d\n", ioctl(fd, OSPFSIOCRASH, 100));
close(fd);
}
我希望输出是
crash: 100
ioctl call: 0
但输出实际上是
crash: 0
ioctl call: 0
我敢打赌我做错了一些简单的事情。有人可以帮忙并指出问题所在吗?非常感谢你。