簡體   English   中英

read()系統調用不返回EOF

[英]read() system call does not return EOF

我正在嘗試使用open()系統調用從文件中讀取所有數據。 但是我很難弄清文件的結尾。 C EOF標志無效。 我的程序陷入無限循環。 這是代碼。 該文件少於100個字符。

int main()
{
 char buf[100] = {""};
 i = 0;
 int fd = open ("file1.txt", O_RDONLY);
 int bytesread = read (fd, &buf[i], 1);
 char c = buf[i];
 while (c != EOF) {
    i++;
    int bytesread = read (fd, &buf[i], 1);
    c = buf[i];
 }
}

緩沖區不保存EOF,它僅保存讀取的文件中的數據。您可以做的是

while(bytesread > 0 ){
    i++;
    bytesread = read (fd, &buf[i], 1);
}

read(2)不返回EOF 它的返回值是:到達“文件尾”時為0,在錯誤時為-1,在讀取了多個字節時為正值。 此外,您還要檢查EOF 數據 您的循環條件錯誤。

通常,您還要檢查read(2)被打斷,如果被打斷,請重試。

size_t i = 0;
errno = 0;
while (i < sizeof buf && read (fd, &buf[i], 1) >= 0 && errno != EINTR) {
    i++;
    errno = 0;  
 }

我也不是為什么您一次只讀取一個字節,這不是很有效。 您總是可以讀取數據塊並檢查返回值以了解讀取的字節數。

注意:通常,宏EOF也用值-1定義。 因此, 似乎 read(2)返回EOF,但不要感到困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM