Wann sollte ich perror("...") und fprintf(stderr, "...")?
Lesen der man-pages und einige code nicht wirklich helfen, mich in
das Verständnis der Unterschied zwischen - oder besser, Wann sollte ich verwenden - perror("...")
oder fprintf(stderr, "...")
.
InformationsquelleAutor der Frage freeboy1015 | 2012-08-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aufrufen
perror
geben Sie das interpretiert Wert vonerrno
die einen lokalen thread-Fehler-Wert geschrieben von POSIX-syscalls (d.h., jeder thread hat seinen eigenen Wert fürerrno
). Zum Beispiel, wenn Sie einen Anruf zuopen()
und es war ein Fehler erzeugt (D. H., er kehrte-1
), könnte Sie dann anrufenperror
unmittelbar danach zu sehen, was der tatsächliche Fehler war. Bedenken Sie, dass, wenn Sie anrufen anderen Aufrufe, in der Zwischenzeit, dann wird der Wert inerrno
wird über geschrieben und die Berufungperror
nicht von nutzen bei der Diagnose deines Problems, wenn ein Fehler wurde erzeugt, indem eine frühere syscall.fprintf(stderr, ...)
auf der anderen hand kann verwendet werden, um drucken Sie Ihre eigenen benutzerdefinierten Fehlermeldungen. Durch Druck aufstderr
vermeiden Sie Fehler-reporting-Ausgang gemischt mit "normalen" Ausgabe, die gehen, umstdout
.Beachten Sie, dass
fprintf(stderr, "%s\n", strerror(errno))
ist ähnlichperror(NULL)
da ein Aufrufstrerror(errno)
generieren der gedruckten Zeichenfolge fürerrno
und Sie können dann die Kombination mit einer anderen benutzerdefinierten Fehlermeldung überfprintf
.InformationsquelleAutor der Antwort Jason
Sie tun lieber andere Dinge.
Verwenden Sie
perror()
so drucken Sie eine Nachricht aufstderr
entsprichterrno
. Verwenden Siefprintf()
drucken alles zustderr
oder andere stream.perror()
ist eine sehr spezielle Druck-Funktion:entspricht
InformationsquelleAutor der Antwort freeboy1015
perror(const char *s)
: druckt die Zeichenfolge, die Sie geben, gefolgt von einer Zeichenfolge, die beschreibt den aktuellen Werterrno
.stderr
: es ist ein Ausgabe-stream verwendet, um leiten Sie Ihre eigenen Fehlermeldungen (standardmäßig auf dem terminal).Relevant:
char *strerror(int errnum)
: geben Sie die Fehlernummer, und es werden die damit verbundene Rückkehr Fehler-string.InformationsquelleAutor der Antwort Adib
perror() schreibt immer auf stderr;
strerr(), verwendet zusammen mit fprintf () schreiben kann zu jedem Ausgang - inklusive stderr, aber nicht ausschließlich.
Darüber hinaus perror schreibt seine eigenen text-Formatierung "text: Fehler Beschreibung"
InformationsquelleAutor der Antwort Sebastien
Perror-Funktion mehr Zeit zum durchführen der Ausführung Anruf geht vom user space Kernel space während fprintf-Aufrufe hineinkommst api kernal
InformationsquelleAutor der Antwort vivek singh