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

linux – copy_from_user()的返回值

这是返回值的描述.
unsigned long copy_from_user
    (void *to,const void __user *from,unsigned long count)

返回值是仍要复制的内存量.

它到底意味着什么?如果返回值为5,是否复制了(count-5)个字节?仅复制(count-5)个字节的原因是什么?是因为to的大小小于(系统应该崩溃,然后,右)?

解决方法

copy_from_user函数可能由于各种原因(通常由于地址无效)而失败,只复制部分请求的数据,甚至没有复制.

返回0表示成功的函数一个约定(不是普遍遵循).在copy_from_user的情况下,将结果定义为未复制的字节数允许它使用相当简单的规则遵循此约定.

直观地说,返回实际复制的字节数可能更有意义,但它定义的方式允许使用它的代码以类似于成功返回0的其他函数的方式测试错误. (在许多情况下,无法复制多少字节并不重要;任何非零结果都只是一个错误.)

如果它返回一个小于count的非零值,表示部分拷贝,则可能意味着用户空间内存缓冲区在用户进程的地址空间内启动,但超出了它的末尾.

原文地址:https://www.jb51.cc/linux/394413.html

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

相关推荐