Подтвердить что ты не робот

Как установить значение 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

Спасибо

4b9b3361

Ответ 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;
  }
}