如何设置errno值?

时间:2012-07-28 08:50:55

标签: c linux error-handling errno

我有两种不同方法的调用:

void func1() 
{
  // do something 
  if (fail) 
  {
    // then set errno to EEXIST

  }

}

第二种方法:

void func2() 
{
  // do something 
  if (fail) 
  {
    // then set errno to ENOENT

  }

}
  1. 当我将errno设置为某个值时,它会做什么?只是错误检查?

  2. 如何在上述方法中设置errno func1func2EEXISTENOENT

  3. 谢谢

3 个答案:

答案 0 :(得分:52)

出于所有实际目的,您可以将errno视为全局变量(尽管通常不会)。所以请加入errno.h并使用它:

errno = ENOENT;

您应该问问自己errno是否是最适合您的错误报告机制。功能是否可以设计为自己返回错误代码?

答案 1 :(得分:9)

IMO,为系统级别设计的标准errno。我的经验是不污染他们。如果要模拟C标准errno机制,可以执行以下定义:

/* your_errno.c */
__thread int g_your_error_code;

/* your_errno.h */
extern __thread int g_your_error_code
#define set_your_errno(err) (g_your_error_code = (err))
#define your_errno (g_your_error_code)

您还可以实施your_perror(err_code)。更多信息,请参阅 glibc 的实现。

答案 2 :(得分:4)

#include <errno.h>
void func1() 
{
  // do something 
  if (fail) 
  {
    errno = ENOENT;
  }
}