J'ai vu errcée symbolique à string - Overflow de pile , donc même si cette question est existe une fonction API C C, qui, comme Par exemple, j'aimerais P> bash code> associé, je peux déjà dire que ce n'est pas trivial; Mais juste pour confirmer: strError () code> acceptera le numéro numérique errno code> comme argument - mais qui imprimera le mnémonique (par exemple einval code>) au lieu de la chaîne de description d'erreur (par exemple "argument invalide")? p> Number: 22 (EINVAL): 'Invalid argument'
5 Réponses :
Vous voulez strError (3) . perror (3) . BTW, le errno (3) la page de l'homme les mentionne. < / p>
Vous n'avez probablement pas besoin d'afficher le einval code> mnémonique (sauf si vous vous souciez de la génération de code C). Si vous le faites, effectuez une fonction pour cela (essentiellement, un interrupteur code> code>). P>
OP sait ce que StreRror est. Je suis sûr qu'ils savent comment ils pourraient écrire un énoncé de commutation basé sur errno.h. Ils demandent s'il existe déjà une mise en œuvre de cela. Je suppose n'est pas.
Merci pour ça, @ BasileSeleTaryNkevitch; Comme @slim a commenté, j'étais errer si une mise en œuvre existait, et maintenant, il semble que cela soit confirmé que cela ne le fait pas. Acclamations!
La deuxième partie de votre question est répondue par La première partie est plus intéressante, c'est-à-dire comment obtenez-vous le nom de la constante C pour l'erreur. Je crois qu'il n'y a aucun moyen de le faire en utilisant Standard strError code> (comme vous le soulignez), ou mieux strerror_r code>, mais dans glibc code> au moins Vous pouvez simplement utiliser % m code> en tant que spécificateur de format. p>
Glibc Code>. Vous pouvez construire votre propre tableau statique ou table de hachage pour le faire relativement facilement. P>
Merci pour la réponse @ABLIGH - J'ai accepté l'autre réponse depuis qu'il mentionne que vous auriez besoin d'une table de recherche supplémentaire, ce que font les solutions de script. Acclamations!
Malheureusement pas; Il n'y a pas de support introspection pour les macros d'erreur Vous pouvez le faire trivialement en python: p> Ceci est parce que les maintenants Python sont allés au problème de la génération d'une table de recherche: http: // hg. python.org/cpython/file/tip/modules/errnomodule.c p> p> E code>.
Merci pour la réponse, @ecatmur - je l'accepterai parce qu'il confirme qu'il n'y a pas de tel soutien et comment Python a-t-il. Acclamations!
Quel est le problème?
struct errno_str_t {
int code;
const char *str;
} errnos[] = {
{ EINVAL, "EINVAL" },
...
};
Merci pour ça @ user3125367 - Votre approche (et d'autres) nécessite une étape de script supplémentaire, afin de générer une table de recherche; Mais j'étais errant s'il y avait déjà une méthode "intégrée" standard. Acclamations!
Ce n'est pas portable; En fait, sys / errno.h code> est un emplacement non standard et ne doit même pas exister. Il existe des moyens semi-portables de générer une liste en passant les options de préprocesseur appropriées et en traitement #include
@R .. Je sais que tout le point est dans la deuxième ligne de ma réponse, ne prétendant pas être absolument portable (donc dans une certaine mesure i>). Mais ne pas avoir cette cartographie dans les normes ou la définition à la main est encore moins portable.
Voici la fonction qui renvoie Merci plus tard. P> errno code> comme mnémonique:
https://past.ubuntu.com/26170061/ P>
"Argument invalide" est utile. "Einval" n'est pas. Ne vous inquiétez pas de faire cela, s'il vous plaît. Ce n'est pas utile.
Einval est utile à certains publics. Par exemple, vous pouvez grep pour einval en code.
Il n'y a pas de fonction qui fait cela.
Il n'y a pas de moyen standard de le faire. Toutefois, si les codes d'erreur sont garantis pour être identiques sur les plates-formes que vous développez, vous pouvez créer manuellement un tableau de
constr * code> s et imprimer le tableau à l'index deerrno code>.Je pense que est i> utile pour ajouter
einval code> sinon si vous vous demandez pourquoiSELECT CODE> (ou similaire) renvoie une chaîne donnée, vous avez besoin Pour d'abord traduire à partir de cette chaîne dans un code d'erreur, regardez la documentation. Quant à ne pas être utile pour mettre fin aux utilisateurs, comment "argument invalide" aide-t-il un utilisateur final?