【问题标题】:return value of copy_from_user()copy_from_user() 的返回值
【发布时间】:2014-05-02 17:41:20
【问题描述】:

这里是返回值的说明。

unsigned long copy_from_user
    (void *to, const void __user *from, unsigned long count)

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

这到底是什么意思?如果返回值为 5,是否复制了 (count-5) 字节?仅复制 (count-5) 字节的原因是什么?是不是因为to的size比from小(那系统应该崩溃了吧)?

【问题讨论】:

    标签: linux linux-kernel


    【解决方案1】:

    copy_from_user 函数可能因各种原因失败(通常是由于地址无效),仅复制所请求数据的一部分,甚至不复制。

    函数返回 0 表示成功,有一个约定(并非普遍遵循)。在copy_from_user 的情况下,将结果定义为复制的字节数允许它通过一个相当简单的规则遵循这个约定。

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

    如果它返回一个小于count 的非零值,表示部分复制,它可能意味着用户空间内存缓冲区从用户进程的地址空间开始,但延伸到用户进程的地址空间之外结束了。

    【讨论】:

      猜你喜欢
      • 2012-05-22
      • 2015-08-05
      • 1970-01-01
      • 2016-07-13
      • 2016-01-15
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多