关于Linux内核copy_to_user的问题

qq_33329896 2017-04-09 04:35:52
我写了一个Linux的内核代码,现在要将内核中结构体数组送到用户中去,但是老是报错,求大神帮看一下代码。。。。
int sys_ptreecall(struct prinfo __user *buf, int nr)
{
n=0;
struct prinfo buff[nr];
printk("%d\n",sizeof(buff));
struct task_struct *p,*tmp;
read_lock(&tasklist_lock);
int j;
p=&init_task;
for_each_process(p)
{
buff[p->pid].pid=p->pid;
printk("%d\t",buff[p->pid].pid);
j=0;
for(;j<16;j++)
{
if(p->comm[j] == '\0')
{
buff[p->pid].comm[j] = '\0';
break;
}
else
buff[p->pid].comm[j] = p->comm[j];
}

printk("%s\t",&(buff[p->pid].comm));

buff[p->pid].state=p->state;
printk("%d\t",buff[p->pid].state);

buff[p->pid].parent_pid=p->parent->pid;
printk("%d\n",buff[p->pid].parent_pid);

tmp=list_entry(p,struct task_struct,children);
buff[p->pid].first_child_pid=tmp->pid;

tmp=list_entry(p,struct task_struct,sibling);
buff[p->pid].next_sibling_pid=tmp->pid;

buff[p->pid].uid=p->cred->uid;

//p=next_task(p);
}
read_unlock(&tasklist_lock);
//printk("success unlock\n");
//traverse(buf,1);
if(copy_to_user((struct prinfo *)buf,buff,sizeof(buff)))
{
printk("fail\n");
return 0;
}
return 0;
}
...全文
911 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
InsaneCode 2017-05-31
  • 打赏
  • 举报
回复
报错是指什么意思,编译出错吗?如果是把编译出错的信息贴出来看看,要不大家就要一行一行看啊
小陆zi 2017-05-17
  • 打赏
  • 举报
回复
if(copy_to_user((struct prinfo *)buf,buff,sizeof(buff))) 你的意思是拷贝16个prinfo吧? if(copy_to_user((struct prinfo *)buf,buff【0】,sizeof(buff))) if(copy_to_user((struct prinfo *)buf,buff【0】,sizeof(buff))) if(copy_to_user((struct prinfo *)buf,buff【0】,sizeof(buff)))

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧