2015-11-21 1 views
2

Considérant «C» comme plate-forme de développement sur le système Linux, j'ai une application qui veut définir un errno unique et différent de predefined system errno. Supposons maintenant que si je viens attribuer un errno unique errno = 201, puis appel correspondant à strerr (errno) me donnera le résultat en « Erreur inconnue », puisque c'est errno sur mesure, inconnu du systèmeComment ajouter/enregistrer un unique errno avec un message d'erreur correspondant au système Linux?

donc Comment je peux enregistrer/ajouter cet unique errno (disons 201) au système Linux.

+0

Si vous avez la permission root, vous pouvez ajouter une macro pour votre errno et vérifier. –

+0

Cela va juste me permettre d'assigner un errno en utilisant une macro.eg: définir errno comme #define EMYNUM 201 et ensuite utiliser errno = EMYNUM.But quand je ferai strrerr (EMYNUM), il me renverra toujours "Unknown error 201" Comme il n'y a pas de chaîne correspding err, le système est conscient de. – user2589882

Répondre

1

Vous pouvez utiliser LD_PRELOAD astuce pour attraper appel à strerror et vous possédez résultat, si errno=201, voir http://www.catonmat.net/blog/simple-ld-preload-tutorial/

+1

Merci pour l'astuce.Cependant, je suis à la recherche d'un fichier, même si sa partie de la source du système, où je peux ajouter une chaîne d'erreur correspondante pour mon erreur code.eg: cas ENOMEDIUM: retour "Aucun support trouvé", cas EMYNUM: retour "MY ERR MESSAGE" – user2589882

+0

Puis le télécharger à partir d'ici: https://www.gnu.org/software/libc/, modifier et reconstruire – fghj

4

Sur un système Linux, la fonction strerror est mis en œuvre par glibc

La source de la fonction est dans:

Les cordes sont situées dans:

Les cordes sont tous connectés dans la glibc.

Vous pouvez saisir le source et le créer vous-même avec vos chaînes d'erreur ajoutées. L'option la plus facile est cependant de créer votre propre routine d'impression d'erreur qui vérifie vos codes d'erreur et imprime la chaîne correspondante et, si ce n'est aucun de vos codes d'erreur, appelle strerror à la place.

Cela a l'avantage que votre application ne repose pas sur une version modifiée de glibc, donc il est portable à d'autres systèmes.

+1

"* L'option la plus facile est cependant de faire votre propre routine d'impression d'erreur ... *" ce n'est pas seulement le moyen le plus simple mais aussi recommandé, de ne pas dire le seul * sane *. – alk