我正在尝试使用 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];
}
}
最佳答案
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;
}
我也不是为什么你一次只读取一个字节,这不是很有效。您始终可以读取数据 block 并检查返回值以了解读取的字节数。
注意:通常宏 EOF
也定义为值 -1。所以它可能似乎 read(2)
返回 EOF 但不要混淆。
关于c - read() 系统调用不返回 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52831506/