2016-03-29 4 views
0

Ich habe gesehen, dass viele Bibliotheksfunktionen wie printf, recv, send, strtol, socket und viele andere setzen errno Wert, um seinen entsprechenden Fehler anzuzeigen. Ich habe nach fprintf() in man-Seite sowie im Internet gesucht, aber ich finde nichts klar. Also bitte, hilf mir, meine Zweifel zu klären.Ist die Funktion fprintf() für ihre Fehleranzeige errno gesetzt?

Ich möchte wissen, ob fprintf() errno verwendet, um seinen Fehler anzuzeigen?

+3

Warum nicht die Handbuchseite lesen? –

+0

Siehe [this link] (http://www.cplusplus.com/reference/cstdio/fprintf/) für eine Erklärung von fprintf(). Im Grunde gibt es einen Fehler durch den Rückgabewert und nicht errno: "Bei Erfolg wird die Gesamtzahl der geschriebenen Zeichen zurückgegeben. Wenn ein Schreibfehler auftritt, wird der Fehlerindikator (ferror) gesetzt und eine negative Zahl zurückgegeben." – dean

+0

'printf' stellt' errno' nicht ein, es gibt nur eine negative Zahl zurück. – jacob

Antwort

0

Einstellung errno von fprintf() ist nicht durch die C-Norm angegeben.

Einige Compiler erstellen einen Code, der den Wert errno auf den Wert ERANGE setzt, um den Bereich außerhalb des zulässigen Bereichs (Überlauf) oder andere Werte anzuzeigen. Erinnern Sie sich, der C-Standard spezifiziert nur ein paar: EDOM EILSEQ ERANGE.

Hinsichtlich der Rückgabewert von fprintf():

fprintf Die Funktion gibt die Anzahl der Zeichen gesendet wird, oder einen negativen Wert, wenn ein Ausgang oder Codierungsfehler aufgetreten ist. C11 §7.21.6.1 14

if (fprintf(ostream, ...) < 0) Handle_Error(); 
1

Wenn Sie auf Linux sind einen Blick auf explain_fprintf

http://linux.die.net/man/3/explain_fprintf

Die explain_fprintf-Funktion verwendet wird, eine Erklärung eines Fehlers zu erhalten, zurück durch den Systemaufruf fprintf (3). Die kleinste Nachricht, die die Nachricht enthält, ist der Wert von strerror (errno), aber normalerweise wird es viel besser machen und die zugrunde liegende Ursache genauer angeben.

+0

Danke .. Aber ich fragte nach fprintf ... Aber ok ich habe die Antwort .. – Shiv

Verwandte Themen