如何在内核程序中使用copy_to_user()?

时间:2017-03-13 21:49:41

标签: c linux-kernel kernel-module userspace

我尝试在循环中使用copy_to_user()

for_each_process(p) {
    copy_to_user(buf, "data of p", len);
}

但是,我得到的输出是不同的。它只有用户空间中的最后一行数据,例如

#Data expected to copy to user space

123 1234 12 21
1243 124 423 12
1234 422 42 423

#Current Output:
1234 422 42 423

如何从内核空间将每一行复制到用户空间?

1 个答案:

答案 0 :(得分:5)

  

在内核程序中可以使用copy_to_user()多少次?

根据你的需要多次。但它们必须有意义(因为你在任何类型的程序中所做的任何事情都必须有意义)。

  

我想如果传递给copy_to_user()的数据会将数据附加到下一行。

不,copy_to_user不附加任何内容。我不确定你的想法在哪里。

  

实际发生了什么

好吧,你要复制第一个进程的数据,然后用第二个进程的数据覆盖它,然后用第三个进程的数据覆盖它,依此类推。最后,您将获得第三个流程的数据。

  

如何从内核空间将所有三行传输到用户空间?

将每个流程的数据存储在其他位置。