Как установить errno value?

у меня есть два вызова двух различных методов :

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 в вышеуказанных методов func1 и func2 to EEXIST и ENOENT

спасибо

3 ответов


для всех практических целей можно рассматривать errno как глобальная переменная (хотя обычно это не так). Так что включайте!--2--> и просто использовать это:

errno = ENOENT;

вы должны спросить себя, если errno является лучшим механизмом отчетности об ошибках для ваших целей. Можно ли сконструировать функции для возврата самого кода ошибки ?


ИМО, стандартный 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;
  }
}