copy_to_user无法在链表linux内核模块中工作

时间:2016-12-12 16:06:56

标签: linux list module kernel

编写linux内核模块时,我遇到了copy_to_user宏的问题。使用此代码:

int err;
struct myElement *el;
list_for_each(cursor,&headList){
  el=list_entry(cursor,struct myElement,link);
  printk("data ptr= %s, data len=%d\n",el->data,el->i);
  err=copy_to_user(buforUz,el->data,el->i);
  printk("err=%d\n",err);
        }

当我使用剪切时,我可以使用dmesg检查printk是否显示正确的值(先前在已分配的备忘录中保存的字符串,指向存储字符串的内存的指针和字符串长度),但copy_to_user不复制任何内容。当我使用strace时,它显示它复制了0个字节:

read(3, "", 65536)                      = 0

可能导致此问题的原因是什么?

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。我的问题是我没有返回我读过的长度,但是0这是错误的,这就是为什么它没有显示任何内容。