内核模块字符设备中应该读取哪个 *** 作? 我知道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的情况下,直到设备被自己写入的用户空间程序使用,它不检查返回数据的实际长度是正确的。
总结以上是内存溢出为你收集整理的错误检查内核模块中的读取function全部内容,希望文章能够帮你解决错误检查内核模块中的读取function所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)