如何在c中获取读操作的错误

时间:2011-05-27 16:03:25

标签: c linux unix

以下代码返回-1,我怎么知道什么是错的? 得到一个详细的错误或什么?

if (read(programFile, value, sizeof(FRAME)) == -1) {
        return SYSTEM_CALL;
    }

5 个答案:

答案 0 :(得分:3)

您需要查看errno,这是系统调用设置的变量,用于指示错误。您可以使用便捷功能perror来获取人类可读的打印输出。

if (read(prog, value, sizeo(FRAME) == -1) {
  perror("read");
  // handle error
}

它可以返回No such file or directory之类的内容。无论哪种方式,使用它都是一种很好的做法。

查看man errnoman perror了解详情。

答案 1 :(得分:1)

您可以按照手册页

中的说明查看global variable errno
  

返回值

     
    

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

  

例如,

ssize_t bytesRead = read(...);
if (bytesRead == -1) {
   switch (errno) {
      case EINVAL: return "Invalid FD";
      case EISDIR: return "FD is a directory";
      ...
   }
}

答案 2 :(得分:0)

来自read手册页:

  

成功时,读取的字节数   返回(零表示结束   文件),文件位置是   由这个数字提前。它不是          如果此数字小于字节数,则出错   要求;          这可能发生在例如因为实际上更少的字节   可得到          现在(也许是因为我们接近文件结尾,或者因为   我们          从管道或终端读取,或因为读取()   是          被信号打断了。 出错时,返回-1,并设置errno          适当即可。在这种情况下,它是否未指定是否   文件          位置(如果有的话)改变。

(我的重点)

因此,您可以使用errnostrerror来获取错误的字符串说明。

答案 3 :(得分:0)

应设置

Errno,以便检查错误是什么。更多信息here

答案 4 :(得分:0)

#include <error.h>
#include <errno.h>

if (read(programFile, value, sizeof(FRAME)) == -1) {
    error (0, errno, "Damn it %s", my_string); 
    /* use nonzero as the 1st param to exit after this function */
    return SYSTEM_CALL;
}

您可以将error功能与errno一起使用。这将打印错误消息和您作为参数传递的自定义字符串。

否则

#include <stdio.h>

if (read(programFile, value, sizeof(FRAME)) == -1) {
    perror ("Damn It!!"); 
    return SYSTEM_CALL;
}

使用perror打印错误消息和自定义字符串。