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. Quand je mets le errno à une certaine valeur, que fait-il ? juste vérification d'erreur ?

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

Merci

23
demandé sur ron 2012-07-28 12:50:54

3 réponses

À 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 utilisez-le simplement:

errno = ENOENT;

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

47
répondu cnicutar 2012-07-28 08:55:18

IMO, la norme errno conçue pour le niveau du système. Mon expérience est de ne pas les polluer. Si vous voulez 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 toujours implémenter your_perror(err_code). Pour plus d'informations, veuillez vous référer à la mise en œuvre de glibc.

8
répondu coanor 2013-01-20 03:57:05
#include <errno.h>
void func1() 
{
  // do something 
  if (fail) 
  {
    errno = ENOENT;
  }
}
3
répondu perreal 2012-07-28 08:55:51