我正在编写一个Linux misc_device驱动程序,并且遇到了读取问题。现在,内核将驱动程序视为快速设备:驱动程序读取被缓冲,直到用户空间调用程序所需的数据可用(例如从磁盘读取文件时)。这意味着在缓冲区已满之前,read系统调用不会返回。我想改变这种行为,并告诉内核在一些数据可用时立即返回系统调用(如在套接字上读取)。
有可能吗?怎么样?我完全错了吗?
谢谢!
答案 0 :(得分:0)
由于你没有回答我的评论:通常任何等待,直到有足够的数据可供驱动程序完成(即你必须在代码中完成),而不是通用内核代码,尽管你的驱动程序将使用通用内核代码这样做[1]。您应该检查struct file f_flags成员中的O_NONBLOCK,以了解是否应该等待。但是,用户空间可能会继续在循环中调用read(),直到read()返回零字节读取。因此,如果您接到调用读取并且自上次调用后没有新数据到达,则将字节读取设置为零非常重要。希望有所帮助。