免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yyykkk1229
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-14 12:13 |显示全部楼层 |倒序浏览
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++))
                                        return -EINVAL;
                                count--;
                                bytes_read++;
                }
                memset(kbuf,0,sizeof(kbuf));
                return bytes_read;
}
里面的函数在开始已经全部定义过,wirte只是简单的copy_from_user(kbuf,outbuf,count);下面是问题,①测试时什么都不输入时,希望read有个初始值,假设为hello,world,希望能够输出hello,world,再次运行测试函数,输入字符串,显示字符串的内容和长度(这个上面的做的出来,不能算是问题),②当再次不输入时,显示出上次输入时的字符串.
请问程序改如何改呀,谢谢!!!!!!

[ 本帖最后由 yyykkk1229 于 2008-8-14 12:15 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-08-14 12:57 |显示全部楼层
放在write前面也不行呀,问题②没办法解决,我输入过一次后显示出字符串.下一次测试不输入的时候kbuf里的东西也被清空,并不能显示上一次的数据.把memset这句去掉后,又出现昨天的问题,当输入长过上一次字符串的时候没有问题,短于上次字符串时.后面的部分被保留///并不是全部刷新的

论坛徽章:
0
3 [报告]
发表于 2008-08-14 13:26 |显示全部楼层
我理解楼上的意思了...我也是那样做的呀...

论坛徽章:
0
4 [报告]
发表于 2008-08-14 14:02 |显示全部楼层
首先非常感谢楼上那位兄弟的耐心,但我按照你的程序如实编写,依然出现如上2个问题,我把我写的测试函数贴出来,麻烦看下是否有误
{...
     printf("input string:");
        scanf("%[^\n]",&outbuf);
        printf("A:%s\n", outbuf);
        count=strlen(outbuf);
        printf("%d\n",count);
        write(testdev,outbuf,count);
        memset(outbuf, 0, sizeof(outbuf));
        n = read(testdev,outbuf,4096);
        printf("read len=%d\n", n);
        printf("%s\n",outbuf);
        close(testdev);
        return 0;
}步骤不会错的,编译完后重新加载,然后测试...
[root@localhost char]# ./a.out
input string:
A:
0
read len=0

[root@localhost char]# ./a.out
input string:hello
A:hello
5
read len=5
hello
[root@localhost char]# ./a.out
input string:
A:
0
read len=0

第一步我想在没有输入的情况下,显示hello world
第三步我想在没有输入的情况下,显示上一步输入的东西hello
请问该如何修改,谢谢了~

论坛徽章:
0
5 [报告]
发表于 2008-08-14 14:46 |显示全部楼层
OK ,非常感谢!!!
老师布置的任务,让我实现这些功能,没办法呀,呵呵
慢慢深入学习,接触LINUX快一个月了,感觉进度慢了些,主要自己读程序写程序的功底不行
谢谢呀~

论坛徽章:
0
6 [报告]
发表于 2008-08-14 14:47 |显示全部楼层
对了,忘了说了,你加了2行程序,第2个问题也解决了,呵呵~

[ 本帖最后由 yyykkk1229 于 2008-8-14 14:53 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-08-18 09:59 |显示全部楼层

回复 #11 dreamice 的帖子

算是读研吧,我本科学硬件的,也就瞎混混,9月份研一,导师叫我学些LINUX方面的东西,通过MAIL给我布置任务,然后一点点实现,呵呵,要努力呀,发现这东西真蛮有意思的,谢谢楼上的...不会的问题还向您请教
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP