文件读取错误:成功

时间:2011-01-31 04:50:08

标签: c unix

我的基本代码如下,

   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权限。程序抛出错误“文件读取错误:成功”...任何人都可以说出可能的原因吗?感谢

3 个答案:

答案 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)