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.
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.