我正在尝试使用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];
}
}
答案 0 :(得分:2)
缓冲区不保存EOF,仅保存读取的文件中的数据。您可以做的是
while(bytesread > 0 ){
i++;
bytesread = read (fd, &buf[i], 1);
}
答案 1 :(得分:2)
read(2)
不返回EOF
。它的返回值是:到达“文件尾”时为0,在错误时为-1,在读取了多个字节时为正值。此外,您还要检查EOF的 data 。您的循环条件不正确。
通常,您还需要检查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,但不要混淆。