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的非零值,表示部分拷贝,则可能意味着用户空间内存缓冲区在用户进程的地址空间内启动,但超出了它的末尾.

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...