web-dev-qa-db-fra.com

Comment définir la valeur errno?

J'ai deux appels à deux méthodes différentes:

void func1() 
{
  // do something 
  if (fail) 
  {
    // then set errno to EEXIST

  }

}

Et la deuxième méthode:

void func2() 
{
  // do something 
  if (fail) 
  {
    // then set errno to ENOENT

  }

}
  1. Lorsque je donne à errno une valeur, que fait-il? juste une vérification d'erreur?

  2. Comment puis-je définir errno dans les méthodes ci-dessus func1 et func2 à EEXIST et ENOENT

Merci

28
JAN

À toutes fins pratiques, vous pouvez traiter errno comme une variable globale (bien que ce ne soit généralement pas le cas). Incluez donc errno.h et il suffit de l'utiliser:

errno = ENOENT;

Vous devriez vous demander si errno est le meilleur mécanisme de rapport d'erreurs pour vos besoins. Les fonctions peuvent-elles être conçues pour renvoyer le code d'erreur elles-mêmes?

55
cnicutar

IMO, la norme errno conçue pour le niveau système. Mon expérience est de ne pas les polluer. Si vous souhaitez simuler le mécanisme C standard errno, vous pouvez faire une définition comme:

/* 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)

et vous pouvez également implémenter your_perror(err_code). Pour plus d'informations, reportez-vous à l'implémentation de glibc.

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