gpt4 book ai didi

c - 如何使用 copy_from_user 的正确方法?

转载 作者:太空狗 更新时间:2023-10-29 17:19:45 26 4
gpt4 key购买 nike

我正在尝试使用以下函数将值从用户空间复制到内核空间:

static ssize_t device_write(struct file *filp, const char *buff, size_t len, loff_t  *off) 
{

unsigned long copy=0;
int desp=0;

copy = copy_from_user(&desp, &len, 4);

printk(KERN_ALERT "copy: %lx\n", copy);
printk(KERN_ALERT "desp: %d\n", desp);
}

其中“len”是存在于用户空间的变量,我想把它复制到内核空间的“desp”

我从用户空间调用的函数是(根据 file_operations 结构,write 是 device_write):

 write (fd,buffer,8, &off);

当我打印时,应该存储在“desp”中的值总是 0(应该是 8)。我的代码有什么问题?我看过几个例子,我实现了很多变体,但都没有用。

最佳答案

手册中的write函数原型(prototype)为:

ssize_t write(int fd, const void *buf, size_t count);

所以你只需要传递3个值给write,分别是:文件描述符fd,你的数据所在的buffer,以及count 您要写入的字节数。

这是关于用户空间的。现在让我们转到内核空间写入函数,即您的 device_write

这个函数的参数buf是包含你想从用户空间写入的数据,count是发送要写入的数据的长度核心。所以你应该从 buf 指针而不是 len 复制数据。

所以,正确的做法是:

char *desp;  //allocate memory for this in kernel using malloc
copy_from_user (desp, buff, len);

这应该可以。

关于c - 如何使用 copy_from_user 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17490479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com