【问题标题】:C read() and write() while loopC read() 和 write() while 循环
【发布时间】:2014-11-22 09:33:53
【问题描述】:

这里是示例代码:

int nbajt; int buf[];

 // we opened file and get descriptor fd

 while ((nbajt = read(fd, buf, 5)) > 0) {
        if (write(fd2, buf, nlbajt) == -1) {
            perror("ERROR");
            exit(1);
        }
    } 

我不明白当我们使用 while 循环时它是如何工作的。这个循环会进行多少次? (buf 的长度的倍数?)。 nbajt 的值是否只有 10 + buf 文件位置会在每个循环步骤后更改 1 个位置?所以第一步我们有nlbajt = 1,我们把buf放在第一个位置char,然后把它写到fd2?。最后我们有nlbajt==0 所以这意味着它是文件的结尾?如果我错了,我将不胜感激。我主要关心的是 nbajt 值如何变化。这种态度有何不同:

nbajt = read(fd, buf, 5));
write(fd2, buf, sizeof(a));

【问题讨论】:

    标签: c buffer system file-descriptor


    【解决方案1】:

    read() 的原型如下:

    int  read(  int  handle,  void  *buffer,  int  nbyte );
    

    返回成功读取的字节数。到达 EOF 时为 0。出现错误时为 1。

    nlbajt = 0 在这里表示EOF。

    【讨论】:

    • 我知道,但是当我们使用 while 循环时会发生什么?这个 nlbajt 是如何变化的?这个循环执行了多少次?
    • @user3402584 在到达 EOF 之前,此循环将继续。这意味着直到读取的字节数大于 0,您的 while 循环才会通过。在您的情况下,每个循环中为 5 ytes,因此当达到 EOF 时,您的 read() 将返回 0,因此条件失败并退出循环
    猜你喜欢
    • 1970-01-01
    • 2019-02-07
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 2019-04-03
    相关资源
    最近更新 更多