我的基本代码如下,
fd = open("test.file", O_RDONLY);
if (read(fd, &tempch, 1) < 1) {
perror("File Read Error");
exit(1);
}
printf("We could read from the file\n");
test.file存在于文件系统中,并已获得777权限。程序抛出错误“文件读取错误:成功”...任何人都可以说出可能的原因吗?感谢
答案 0 :(得分:6)
read()
返回零计数是完全正常的,它只是意味着它遇到了文件的结尾。如果它返回的值小于零,则表示错误。
如果返回-1,则应设置errno
,这将告诉您出了什么问题。
您的文件是否包含任何内容?由于您提到了类似UNIX的权限,因此POSIX specification for read()应该对您有用。
答案 1 :(得分:2)
您可能想要检查open的返回值以及test.file中存在的字节数!如果文件是0字节,则返回值小于1是预期的。
从阅读手册页
成功时,读取的字节数 返回(零表示结束 文件),文件位置是 由这个数字提前。它不是 如果此数字小于,则出错 请求的字节数;这个 可能会发生,例如因为更少 字节实际上现在可用 (也许是因为我们接近了 文件结束,或者因为我们正在阅读 从管道,或从终端),或 因为read()被a打断了 信号。
答案 2 :(得分:1)
我不确定,但是这个
if (read(fd, &tempch, 1) < 1)
几乎可以肯定是
if (read(fd, &tempch, 1) < 0)