C read()和write()while循环

时间:2014-11-22 09:33:53

标签: c buffer system file-descriptor

以下是示例代码:

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只有1或0 +值的buf文件位置将在每个循环步骤后改变1位?所以在第一步中我们有nlbajt = 1并且我们将buf第一个位置char,然后将其写入fd2?。最后我们有nlbajt==0所以它意味着文件的结尾?如果我错了,我将不胜感激。我主要担心的是nbajt值是如何变化的。这种态度如何不同:

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

1 个答案:

答案 0 :(得分:2)

read()具有以下原型:

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

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

nlbajt = 0表示此处的EOF。