我有两个不同的方法调用:
void func1() { // do something if (fail) { // then set errno to EEXIST } }
第二种方法:
void func2() { // do something if (fail) { // then set errno to ENOENT } }
当我将errno
为某个值时,它有什么作用? 只是错误检查?
如何在上面的方法func1
和func2
设置errno
到EEXIST
和ENOENT
谢谢
对于所有的实际目的,你可以把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; } }