gpt4 book ai didi

c - 无缓冲的 misc_device 读取 - linux 内核驱动程序

转载 作者:太空狗 更新时间:2023-10-29 12:41:41 25 4
gpt4 key购买 nike

我正在编写 Linux misc_device 驱动程序,但在读取时遇到问题。现在内核将驱动程序视为一个快速设备:驱动程序读取被缓冲,直到用户空间调用者所需的数据可用为止(比如从磁盘读取文件时)。这意味着 read 系统调用在缓冲区满之前不会返回。我想更改该行为并告诉内核在某些数据可用时立即返回系统调用(例如在套接字上读取)。

这可能吗?如何?我这样做完全错了吗?

谢谢!

最佳答案

因为你没有回答我的评论:通常任何等待直到有足够的数据可用都是由驱动程序完成的(即你必须在你的代码中完成),而不是由通用内核代码完成,尽管你的驱动程序将使用通用内核代码去做[1]。您应该检查 struct file f_flags 成员中的 O_NONBLOCK 以了解您是否应该等待。但是,用户空间可能会继续在循环中调用 read(),直到 read() 返回读取的字节为零。因此,如果您收到读取调用并且自上次调用以来没有新数据到达,则将读取的字节数设置为零很重要。希望对您有所帮助。

[1] http://www.makelinux.net/ldd3/chp-6-sect-2

关于c - 无缓冲的 misc_device 读取 - linux 内核驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40746383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com