Chinaunix首页 | 论坛 | 博客
  • 博客访问: 543399
  • 博文数量: 101
  • 博客积分: 1889
  • 博客等级: 上尉
  • 技术积分: 906
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-14 16:22
文章分类

全部博文(101)

文章存档

2012年(11)

2011年(19)

2010年(59)

2009年(12)

我的朋友

分类: LINUX

2010-04-28 17:31:08


为了好好理解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")为什么编译不过呢?

阅读(1638) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~