文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>globalfifo驱动测试中碰到的问题

globalfifo驱动测试中碰到的问题

时间:2010-04-28  来源:likefreebird


为了好好理解globalfifo这个驱动程序,自己写了两个个简单的测试程序,一个循环的写,一个循环的读,结果循环写工作正常,循环读只有第一次正常。读函数如下

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/ioctl.h>
#include<memory.h>
#include<fcntl.h>
int main()
{
    int i=100;
    int fd0;
    int ret_r=0, ret_w=0;
    char r[10];
    
        printf("i = %d\n",i);
        printf("open: /dev/globalfifo...\n");
        fd0 = open("/dev/globalfifo", O_RDONLY/*|O_NONBLOCK*/);
        if(fd0 < 0)
        {
            perror("open device globalfifo err!\n");
            exit(1);
        }
    while(i)
    {
        printf("i = %d\n",i);
        ret_r = read(fd0, r, 10);
        printf("ret_r = %d",ret_r);
        if(ret_r < 0)
        {
            printf("read from glbalfifo error!,%d\n",ret_r);
            exit(1);
        }
        else if(ret_r == 0)//为什么从来没有返回0的时候呢,即使读到文件的末尾
            printf("Read empty!");
        else
        {
            printf("read out char num:%d\n",ret_r);
            printf("read from the globalmem: %s\n",r);

           //原来是用的memset(r,0,10*sizeof('a')),结果第二次循环的时候i的值

           //总是变成-1.挨条语句注释掉测试,才发现问题在这里
            memset(r, 0, sizeof(r));

            //后来加了下面的测试语句,才算明白

            printf("sizeof('a') = %d;sizeof(char) =%d;sizeof(r) =%d \n",sizeof('a'),sizeof(char),sizeof(r));
            usleep(2000000);
        }
        i--;
        printf("i = %d\n",i);
    }
    close(fd0);
    return 0;
}

问题1

    memset(r,0,10*sizeof('a')),r只占用10个byte,而10*sizeof('a')把40byte的空间都置0了。。。。

    测试语句的输出:sizeof('a') = 4;sizeof(char) =1 ;sizeof(r) =10

问题2

    read函数从来就没有返回过0

    我写入10个byte,读出10byte,或者不写,直接读都不会返回0,而是-1;

问题3

    sizeof("aaaaa")为什么编译不过呢?

相关阅读 更多 +
排行榜 更多 +
崩溃大陆2鱼竿如何获取

崩溃大陆2鱼竿如何获取

冒险解谜 下载
狙击手行动

狙击手行动

冒险解谜 下载
狙击突围行动最新版

狙击突围行动最新版

冒险解谜 下载