微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误检查内核模块中的读取function

内核模块字符设备中应该读取哪个操作? 我知道copy_to_user(...)将返回未复制的字节数,并在成功将返回0.我看到例如使得read()函数return -EFAULT如果copy_to_user(...)返回0以外的任何东西。但是在成功之后, 这个返回0, 这表示返回读取的字节数。 我应该回来什么? 还应该检查static ssize_t dev_read(struct file *filep,char *buffer,size_t len,loff_t *offset)如检查如果buffer==NULL或len == something? 如果是的话,我应该怎么回到一个坏的条件?

epoll_wait:maxevents

学习Windows生态系统的最佳途径是什么?

如何在Linux中使用c查找目录

一个目录

如何设置计时器分辨率为0.5毫秒?

.read操作应该返回:

复制到用户提供的缓冲区中的字节数,或

负面的错误代码

此外,操作应该更新*offset值,所以从文件中读取数据将会返回下一部分。

如果驱动程序执行遵循此规则,像cat , dd这样的标准命令将正确地解释读取系统调用的结果,并且通过可能地重复它,向用户输出设备的完整“内容”。

通常,在copy_to_user调用中检查buffer参数的正确性。 如果这个调用失败(返回非零),- .read通常由.read返回。

len参数很少检查错误。 假设data_len是剩余数据的长度:

如果len < data_len ,则将第一个len字节复制到缓冲区并返回len

如果len > data_len ,则将所有剩余的字节复制到缓冲区并返回data_len

如果data_len或len是0,则返回0

有时设备的数据只能被预定义大小的部分读取。 在这种情况下,您可以检查len并返回-EINVAL,以防它有不适当的值。 buffer也可以检查对齐。

例如,在.read返回0的情况下,直到设备被自己写入的用户空间程序使用,它不检查返回数据的实际长度是正确的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐