LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 915|回复: 2

一个read函数封装的问题

[复制链接]
发表于 2007-7-15 01:21:19 | 显示全部楼层 |阅读模式
最近在看《unix网络编程》,看到第三章的时候发现一个看不懂,我是新手,希望大家能指导一下,谢谢。
函数代码如下:
static ssize_t
my_read(int fd, char *ptr)
{
    if (read_cnt <= 0) {
        again:
            if ( (read_cnt = read(fd, read_buf, sizeof(read_buf))) < 0) {
                if (errno == EINTR)
                    goto again;
                return (-1);
            } else if (read_cnt == 0)
                return (0);
            read_ptr = read_buf;
    }
   
     read_cnt--;
     *ptr = *read_ptr++;
     return(1);
}

特别不懂read_cnt--;这句用什么用处,大家指点一下吧,不胜感激。
发表于 2007-7-15 15:00:12 | 显示全部楼层
这个函数在第一次被调用的时候前应该将 read_cnt 置为小于等于 0 。第一次调用时会进行一次 read ,并将成功后的结果存储在 read_buf 里并使 read_ptr 指向第一个 char 。而每次调用该函数则只返回一个字符, read_cnt 实际上是缓存中剩余字符数。因此每执行一次 my_read() 就会递减1,而指针 read_ptr 则每次向后读一个。直到 read_cnt <= 0 ,该函数会重新调用 read() 。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-15 17:38:30 | 显示全部楼层
明白了,谢谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表