关于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;
}
...全文
912 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)))
Linux内核一直是学习的难点:将近3000万行代码,5万多个源文件,代码庞大繁杂、代码很难看懂。《Linux内核编程》将突破以往传统的学习方式,采取更有效和科学的学习方法,多角度地对内核进行多层次分析,不局限于形式,不拘泥细节,目的只有一个:更轻松、更高效地去理解内核、学习内核。为了更好地让学员掌握内核编程技能,更好地理解内核,本课程将采用并不局限于以下学习方法进行课程的录制:降维分析,化简为繁,将复杂的系统简单化用软件工程的方法分析内核:软件分层、模块化分解、框架迭代多角度立体分析Linux内核,目的只有一个:更好地理解内核利用Linux内核中的面向对象编程思想去分析复杂的子系统、子系统交互利用多任务编程的思想去分析Linux内核本套课程预计分为20个左右的小模块,每个模块一个专题,每个专题会陆续发布。拟录制的模块包括但不限于:模块机制、内核裁剪与配置、内核编译与启动、系统调用、中断、文件系统、调度、内存管理、内核同步、设备模型、字符驱动、块驱动、定时器、input、platform设备驱动、device tree、proc、sysfs、I/O...  本课程是《Linux内核编程》的入门篇,主要给大家介绍一下Linux内核开发、Linux驱动开发的就业行情、行业生态、需要掌握哪些技能、Linux内核的学习方法、如何搭建Linux内核的学习开发环境。 

4,436

社区成员

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

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