如何设置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. 如何在上面的方法func1func2设置errnoEEXISTENOENT

谢谢

对于所有的实际目的,你可以把errno当作全局变量(尽管通常不是)。 所以包括errno.h并且使用它:

 errno = ENOENT; 

你应该问自己, errno是不是你的目的最好的错误报告机制。 函数可以被设计成返回错误代码吗?

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的实现。

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