免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2391 | 回复: 6

copy_to_user的问题,大家碰到过没有 [复制链接]

论坛徽章:
0
发表于 2009-07-07 12:50 |显示全部楼层
用户层分配一个大于4096的空间,并将之传入内核
int Data_size=4096*100;
unsigned char* pData=malloc(Data_size);
assert(pData);
rtn = getsockopt(sockfd, IPPROTO_IP, IPT_SO_GET_ACCOUNT_GET_DATA,
pData, &Data_size);

然后内核将数据通过copy_to_user()COPY到用户空间,但是,用户程序始终只能读到第一页的数据,最后我看了下<<linux下设备驱动程序>>中关于copy_to_user的描述,说有用户进程有可能并没有马上拥有全部页面,如是我在getsockopt前加了名memset,结果正确了.觉得这个还不保险,
就用了mlock
不知道这种情况各位碰到过没有

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-07-07 13:09 |显示全部楼层
你的意思是getsockopt返回的Data_size是4096?

论坛徽章:
0
发表于 2009-07-07 13:47 |显示全部楼层
不是,我在内核中并没有填充此字段,只是查看此字段,发现有多少空间就使用多少空间,填充完后,就直接返回0(难道需要在内核中填充此字段吗?),问题是到了用户空间后,除了第一页外,其余的页面上都是空值,我已经确定内核中其余页面上也有数据

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-07-07 14:18 |显示全部楼层
getsockopt这个函数会返回读取到多少数据的,就存在最后一个参数里

论坛徽章:
0
发表于 2009-07-07 15:08 |显示全部楼层
getsockopt,最后一个参数是输入也是输入参数??但现在我没有指定它的值,数据也正常了

论坛徽章:
0
发表于 2009-07-07 15:15 |显示全部楼层
用户空间传的是多少,输的就是多少,我不需要指定它

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-07-07 15:48 |显示全部楼层
原帖由 fly6 于 2009-7-7 15:15 发表
用户空间传的是多少,输的就是多少,我不需要指定它


这个值应该是用来执行之后,读取出来的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP