Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打开char dev文件时发生ioctl错误_C_Linux_Ioctl - Fatal编程技术网

打开char dev文件时发生ioctl错误

打开char dev文件时发生ioctl错误,c,linux,ioctl,C,Linux,Ioctl,我正在编写一个驱动程序代码,从x86读取一些寄存器值。当我运行我的用户空间应用程序时,我得到以下错误 ioctl:设备的ioctl不正确 这是代码嗅探 fd = open_drvfile(); if(ioctl(fd, IOCTL_MSR_CMDS, (long long)msr_start) == -1 ) { perror("ioctl:"); exit (0); } 然后打开_drvfile(),只需打开(创建并打开)char文件,如下所示 fd = open("/dev

我正在编写一个驱动程序代码,从x86读取一些寄存器值。当我运行我的用户空间应用程序时,我得到以下错误

ioctl:设备的ioctl不正确

这是代码嗅探

fd = open_drvfile();
if(ioctl(fd, IOCTL_MSR_CMDS, (long long)msr_start) == -1 ) {
    perror("ioctl:");
    exit (0);
}
然后打开_drvfile(),只需打开(创建并打开)char文件,如下所示

fd = open("/dev/" DEV_NAME, O_RDWR|O_CREAT);
if (fd == -1) {
    perror("Failed to open /dev/" DEV_NAME);
}
return fd;

有一点我犯了错误吗?

字符设备意味着它应该使用
mknod()
创建,而不是使用
open()
标志下的
O_create
(这将创建一个常规文件,而不是字符设备)


(参见问题注释)。

字符设备意味着它应该使用
mknod()
创建,而不是使用
open()
标志下的
O撸u create
(这将创建一个常规文件,而不是字符设备)


(请参阅问题注释)。

我不太明白您想做什么,但由于您在问题标题中引用了一个字符设备,因此open()下的O_CREAT标志对我来说没有多大意义。您是否在
open()
之前使用
mknod()
创建了char设备?我正在使用open()创建并打开文件(因为文件还不存在)。我认为这是错误的。在看到您的答案后,我使用mknod()创建了文件并删除了O_CREAT,现在它可以正常工作了。谢谢。我会把答案贴出来,这样对其他人可能会有帮助:)@pah接受这个答案对我来说是新鲜事。。我只是那样做了。谢谢我不太明白你想做什么,但是因为你在问题标题中引用了一个char设备,open()下的O_create标志对我来说没有多大意义。您是否在
open()
之前使用
mknod()
创建了char设备?我正在使用open()创建并打开文件(因为文件还不存在)。我认为这是错误的。在看到您的答案后,我使用mknod()创建了文件并删除了O_CREAT,现在它可以正常工作了。谢谢。我会把答案贴出来,这样对其他人可能会有帮助:)@pah接受这个答案对我来说是新鲜事。。我只是那样做了。谢谢