免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3408 | 回复: 5
打印 上一主题 下一主题

请教个问题,高手帮忙下,谢谢 [复制链接]

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
1 [报告]
发表于 2008-08-14 12:23 |显示全部楼层

回复 #1 yyykkk1229 的帖子

memset(kbuf,0,sizeof(kbuf));这一句在write函数真正写之前做,这样读的时候就不用清kbuf了,而是在写之前清,这样做显得更合理一些。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2008-08-14 13:23 |显示全部楼层

回复 #3 yyykkk1229 的帖子

我的意思是,read里面的memset去掉,在write里面,写之前,memset一下,就可以了。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
3 [报告]
发表于 2008-08-14 13:46 |显示全部楼层
全局定义:char kbuf[] = "hello world";
static ssize_t read_test(struct file *file,char *outbuf,size_t count,loff_t *f_pos)
{
        printk(KERN_ALERT "read1\n");

        int bytes_read=0;
        
        if(verify_area(VERIFY_WRITE,outbuf,count)==-EFAULT)
        return -EFAULT;
                Message_Ptr=kbuf;
                while(count && *Message_Ptr)
                {
                        //if(put_user(*(Message_Ptr++),outbuf++)) //最好别这么写,函数调用有时候会出问题
                 if(put_user(*(Message_Ptr),outbuf))
                                        return -EINVAL;
                                Message_Ptr++;
                                outbuf++;
                                count--;
                                bytes_read++;
                }
                return bytes_read;
}

static ssize_t write_test(struct file *file,const char *outbuf,size_t count,loff_t *f_pos)
{
        memset(kbuf, 0, sizeof(kbuf));
        copy_from_user(kbuf,outbuf,count);
        return count;
}

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
4 [报告]
发表于 2008-08-14 14:38 |显示全部楼层

回复 #7 yyykkk1229 的帖子

第一步这样解决:
static ssize_t write_test(struct file *file,const char *outbuf,size_t count,loff_t *f_pos)
{
        if (count == 0)
              return 0;
        memset(kbuf, 0, sizeof(kbuf));
        copy_from_user(kbuf,outbuf,count);
        return count;
}
第三步的问题,我觉得你这个没有多大意义,首先,你测试程序既要写又要读,如果不写,就保持原来的数据吧,如果写了,就清空原来的数据,写入新的数据,这是一种逻辑关系;至于读的话,这是另一个逻辑了,他只关心内核中kbuf的数据,并不关心你写没有。完全不同的两个概念,所以,你要实现第三不没有多大意义。如果你想实现,可以改你的测试程序的逻辑。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
5 [报告]
发表于 2008-08-14 15:21 |显示全部楼层

回复 #9 yyykkk1229 的帖子

请问LZ一下,你是读研还是本科啊?老师还布置这种问题,呵呵,有这么个机会学习linux,羡慕啊!加油!

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
6 [报告]
发表于 2008-08-18 10:23 |显示全部楼层

回复 #12 yyykkk1229 的帖子

不错不错啊,学硬件的上来做操作系统相关的,有很大的优势啊。真幸福!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP