C读取功能未定义错误:0

时间:2015-02-20 00:33:39

标签: c

当我调用c读取函数时,perror函数告诉我它是一个未定义的错误:0。

这是由于错误而退出的代码片段:

  if( read(fd,&head_data->npts,sizeof(int)) <= 0 )
  {  
        perror("File read error in reading data\n");
        exit(1);
  }

head_data是一个结构,npts是该结构的int成员。

我查看了opengroup和linux手册页,但找不到有关未定义错误的任何信息。我不知道它是否有任何区别,但我正在Mac OS 10.9.5上编译和运行。

3 个答案:

答案 0 :(得分:4)

来自read(2) man page

  

如果成功,则返回实际读取的字节数。在读取文件结尾时,返回零。否则,返回-1并设置全局变量errno以指示错误。

所以你只读了0个字节 - 意思是文件结束。

答案 1 :(得分:1)

所以条件应该只是更新:

  if( read(fd,&head_data->npts,sizeof(int)) < 0 )
  {  
        perror("File read error in reading data\n");
        exit(1);
  }

答案 2 :(得分:0)

没有错误,这就是perror报告&#34;未定义错误&#34;的原因。如果没有错误,请勿尝试致电perror。您应该只调用perror errno不为零。您致电perrorerrno为零。其余部分如下。

函数read通过返回否定值来指示错误条件(设置errno)。返回零并不表示错误情况。