ioctl调用始终返回-1,但仍然可以正常工作

时间:2018-12-02 07:46:03

标签: c linux linux-device-driver

我正在尝试编写一个简单的设备驱动程序,以使用ioctl在用户应用程序和驱动程序之间发送和接收结构。 这是我解锁的ioctl函数-

<video id="bgvid" controls poster="https://netbramha.staging.wpengine.com/wp-content/themes/netbramha-new/images/thumbnail-video@3x.jpg">
   <source src="video/careers-video.mp4" type="video/mp4">
</video>

我能够使用连续的CMD_WRITE_STRUCT命令将结构从用户应用程序成功传递到驱动程序。 但是,一旦执行CMD_READ_STRUCT,用户应用程序上的ioctl调用将返回-1,错误为“操作不允许”,但结构已成功复制到用户。 在CMD_READ之后,CMD_WRITE不再起作用,因为ioctl显示错误“无效的文件描述符”。 我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

似乎您的代码在这里有一个简单的问题,解释如下:“但是,一旦我执行CMD_READ_STRUCT,在用户应用程序上的ioctl调用将返回-1,错误“不允许操作”,但结构已成功复制到用户。

if(ret)
{
    printk("Error copy_to_user\n");
}   return -1;

应该像

if(ret)
{
    printk("Error copy_to_user\n");
    return -1;
}

对于另一个问题,我认为您可能在应用程序中进行了一些错误检查,这将在返回-1的情况下关闭文件。只是一个疯狂的猜测。