[英]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.