Как установить значение errno?
У меня есть два вызова двух разных методов:
void func1()
{
// do something
if (fail)
{
// then set errno to EEXIST
}
}
И второй метод:
void func2()
{
// do something
if (fail)
{
// then set errno to ENOENT
}
}
-
Когда я устанавливаю значение errno
на какое-то значение, что он делает? просто проверка ошибок?
-
Как установить errno
в приведенных выше методах func1
и func2
на EEXIST
и ENOENT
Спасибо
Ответы
Ответ 1
Для всех практических целей вы можете рассматривать errno
как глобальную переменную (хотя обычно это не так). Поэтому включите errno.h
и просто используйте его:
errno = ENOENT;
Вы должны спросить себя, является ли errno
лучший механизм отчетности об ошибках для ваших целей. Могут ли быть сконструированы функции для возврата самого кода ошибки?
Ответ 2
IMO, стандартный errno
, предназначенный для системного уровня. Мой опыт не загрязняет их. Если вы хотите имитировать стандартный механизм errno
C, вы можете сделать некоторое определение, например:
/* 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-реализации.
Ответ 3
#include <errno.h>
void func1()
{
// do something
if (fail)
{
errno = ENOENT;
}
}