2014-11-22 29 views
0

下面是示例代碼:C瞭解()和write()while循環

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的第一個位置字符,然後寫到fd2 ?.最後我們有nlbajt==0,這意味着它是文件的結尾?我會很感激檢查我是否有錯。我主要關心的是nbajt值如何變化。它是如何不同勢的這種態度:

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

您是否閱讀過'read()'的文檔,以便了解參數和返回值? – 2014-11-22 09:36:46

+0

我正在使用男人。但我明白,只有當我們不使用while循環。讀取返回的字節數。我在那裏爲buf做了改變。 – user3402584 2014-11-22 09:50:28

回答

2

的read()具有以下原型:

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

它返回成功讀取的字節數。當EOF達到時爲0,當出現錯誤時爲-1。

nlbajt = 0這裏意味着EOF。

+0

我知道,但是當我們使用while循環時發生了什麼?這個nlbajt如何改變?這個循環有多少次? – user3402584 2014-11-22 10:07:20

+0

@ user3402584在到達EOF之前,此循環將繼續。這意味着直到讀取的字節數大於0,while循環纔會通過。在你的情況下,它是每個循環5個字節,所以當EOF達到時,你的read()將返回0,所以條件失敗並退出循環 – Gopi 2014-11-22 10:09:21

+0

非常感謝你! – user3402584 2014-11-22 10:10:35