La lecture des pages de manuel et de certains codes ne m'a pas vraiment aidée à comprendre la différence entre - ou mieux, quand je devrais utiliser perror("...")
ou fprintf(stderr, "...")
THX!
La lecture des pages de manuel et de certains codes ne m'a pas vraiment aidée à comprendre la différence entre - ou mieux, quand je devrais utiliser perror("...")
ou fprintf(stderr, "...")
THX!
Appelant perror
vous donnera le interprétée valeur de errno
, ce qui est un fil-erreur locale de la valeur écrite par POSIX syscalls (c'est à dire, chaque thread possède sa propre valeur de errno
). Par exemple, si vous faites un appel à l' open()
, et il y avait une erreur générée (c'est à dire, il est retourné -1
), vous pouvez ensuite appeler perror
immédiatement après, à voir ce qu'était la véritable erreur. Gardez à l'esprit que si vous appelez d'autres appels dans l'intervalle, la valeur en errno
sera écrit sur, et en appelant perror
ne sera pas de toute utilisation dans le diagnostic de votre problème, si une erreur a été générée par un précédent syscall.
fprintf(stderr, ...)
sur l'autre main peut être utilisé pour l'impression de vos propres messages d'erreur personnalisés. Par l'impression d' stderr
, vous évitez à vos rapports d'erreur de la sortie d'multiplexé "normal" de sortie qui devrait aller en stdout
.
Gardez à l'esprit que fprintf(stderr, "%s\n", strerror(errno))
est similaire à l' perror(NULL)
depuis un appel à l' strerror(errno)
permettra de générer de l'imprimé de la chaîne de valeur de errno
, et vous pouvez ensuite combinés qu'avec tout autre message d'erreur personnalisé via fprintf
.
Ils font des choses assez différentes.
Vous utilisez perror()
pour imprimer un message destiné à stderr
et correspondant à errno
. Vous utilisez fprintf()
pour imprimer quoi que ce soit en stderr
, ou tout autre flux. perror()
est une fonction d'impression très spécialisée:
perror(str);
est équivalent à
if (str)
fprintf(stderr, "%s: %s\n", str, strerror(errno));
else
fprintf(stderr, "%s\n", strerror(errno));
perror(const char *s)
: imprime la chaîne que vous lui donnez suivie d'une chaîne décrivant la valeur actuelle de errno
.
stderr
: il s'agit d'un flux de sortie utilisé pour diriger vos propres messages d'erreur (par défaut vers le terminal).
Pertinent:
char *strerror(int errnum)
: donnez-lui un numéro d'erreur, et la chaîne d'erreur associée sera renvoyée.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.