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
}
}
Quand je mets le
errno
à une certaine valeur, que fait-il ? juste vérification d'erreur ?Comment puis-je régler
errno
dans les méthodes ci-dessusfunc1
etfunc2
àEEXIST
etENOENT
Merci
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 ?
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.
#include <errno.h>
void func1()
{
// do something
if (fail)
{
errno = ENOENT;
}
}