Überprüfung auf Erfolg von fwrite in C, perror

8

Wenn fwrite die Anzahl der erfolgreichen Elemente zurückgibt, die in die Datei geschrieben wurden, sagen Sie:

%Vor%

Wird nach erfolgreichem Schreiben in die Datei gesucht? Gibt es noch andere Sorgen?

Danke.

    
Crystal 24.02.2010, 21:49
quelle

4 Antworten

11

Kurz gesagt, nicht ganz. fwrite gibt die Anzahl der erfolgreich geschriebenen Elemente zurück; Sie müssen dies mit der Anzahl der Elemente vergleichen, die Sie schreiben wollten, d. h. diejenigen, die Sie als Argument übergeben haben.

Was Sie getan haben, überprüft, ob einige Elemente geschrieben wurden.

Hier finden Sie eine Referenz für perror .

  

Interpretiert den Wert von global   Variable errno in eine Zeichenfolge und   druckt diese Zeichenfolge nach stderr (Standard   Fehler Ausgabestrom, in der Regel die   Bildschirm), optional davor   Die in str angegebene benutzerdefinierte Nachricht.   errno ist eine integrale Variable, deren   Wert beschreibt den letzten Fehler   produziert durch einen Anruf in eine Bibliothek   Funktion. Die Fehlerzeichenfolgen erzeugt   von perror abhängig von der Entwicklung   Plattform und Compiler. Wenn die   Parameter str ist kein Nullzeiger,   str wird gedruckt, gefolgt von einem Doppelpunkt (:)   und ein Raum. Dann, ob str ein war   Nullzeiger oder nicht, der erzeugte   Fehlerbeschreibung wird gedruckt gefolgt   durch ein Zeilenumbruchzeichen ('\ n'). perror   sollte direkt nach dem Fehler aufgerufen werden   wurde produziert, sonst kann es sein   in Anrufen zu anderen überschrieben   Funktionen.

    
user257111 24.02.2010, 21:52
quelle
2

Ihr Code wird möglicherweise nicht richtig auf Fehler überprüft. Verwenden Sie

%Vor%     
Tronic 24.02.2010 21:54
quelle
0
%Vor%     
just somebody 24.02.2010 21:57
quelle
0

Von der Linux Manpage von fwrite

  

fread () und fwrite () geben die Anzahl der erfolgreich gelesenen Elemente zurück   geschrieben (d. h. nicht die Anzahl der Zeichen). Wenn ein Fehler auftritt, oder   Das Ende der Datei ist erreicht, der Rückgabewert ist eine kurze Anzahl von Elementen (oder   Null).

Sie müssen also mit dem erwarteten Rückgabewert vergleichen.

In vielen Fällen müssen Sie möglicherweise nach errno gleich EAGAIN oder EINTR suchen. In diesem Fall sollten Sie normalerweise die Schreibanforderung wiederholen, während Sie in anderen Fällen kurze Schreibvorgänge verarbeiten möchten anmutig.

Für fwrite können Sie bei einem kurzen Schreibvorgang (wo weniger als Ihre gesamten Daten geschrieben wurden) feof () und / oder ferror () prüfen, um zu sehen, ob der Stream zurückkehrt und endet -file, EOF, wenn zB ein PIPE geschlossen wurde oder der Fehlerinducator-Flag des Streams gesetzt ist.

    
mctylr 24.02.2010 21:57
quelle

Tags und Links