【发布时间】:2016-11-22 15:59:27
【问题描述】:
我正在编写 Linux misc_device 驱动程序,但读取时遇到问题。现在内核将驱动程序视为一个快速设备:驱动程序读取被缓冲,直到用户空间调用者所需的数据可用(例如从磁盘读取文件时)。这意味着读取系统调用在缓冲区已满之前不会返回。我想改变这种行为,并告诉内核在某些数据可用时立即返回系统调用(例如在套接字上读取)。
有可能吗?如何?我做错了吗?
谢谢!
【问题讨论】:
-
不知道九周后你是否仍然对这个问题感兴趣,但是:你确定阻塞发生在内核中吗?我的回忆是,检查结构文件 f_flags 中的 O_NONBLOCK 并在必要时阻止等待输入是驱动程序的工作。否则,如果没有设置 O_NONBLOCK ,它应该在每次读取调用时读取尽可能多的数据并立即返回,并且当读取调用最终发生并且根本没有数据要读取时,返回 0 字节以告诉调用者停止。设置 O_NONBLOCK 与否当然是用户空间的工作。
标签: c linux linux-kernel