Von Manpage von fwrite in Linux zu bekommen,In Linux Fwrite Befehlssatz nicht errno, wie richtigen errno auf Fehlerfälle
BESCHREIBUNG Die Funktion fread() nmemb Elemente von Daten liest, die jeweils eine Größe bytes lang, von dem Strom, auf den der Strom zeigt, lagern sie an dem Ort, der von ptr.
The function fwrite() writes nmemb elements of data, each size bytes long, to the stream pointed to by stream, obtaining them from the location given by ptr.
For nonlocking counterparts, see unlocked_stdio(3).
UCKGABEWERT Bei Erfolg fread() und fwrite() gibt die Anzahl der Artikel gelesen oder geschrieben. Diese Anzahl entspricht der Anzahl der übertragenen Bytes nur, wenn Größe 1 ist. Wenn ein Fehler auftritt oder das Ende der Datei erreicht wird, ist der Rückgabewert eine kurze Anzahl von Elementen (oder null).
fread() does not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3) to determine which occurred.
Nun meine Frage: Angenommen fwrite() Systemaufruf Ausfall durch keinen Platz auf dem Laufwerk aufgetreten. Wie können wir das errno dafür bekommen? Da fwrite das errno im Fehlerfall nicht setzt.
Nur für den Fall errno ist: Die Header-Datei definiert die Integer-Variable errno, die durch Systemaufrufe und einige Bibliotheksfunktionen im Falle eines Fehler gesetzt, um anzuzeigen, was schief gelaufen ist.
Gespräch in Bezug auf die Programmiersprache: C
Fragen Sie, was Sie praktisch tun können, oder über den C-Standard? –
Die Man Seite, die Sie bereits zitiert haben, sagt Ihnen: "Anrufer müssen feof (3) und ferror (3) benutzen, um festzustellen, welche aufgetreten sind". – kaylum
Die man-Seite beantwortet die Frage nicht. feof() sollte nicht auf fwrite() angewendet werden, nur auf fread(). Im Fall von fread() kann feof() und ferror() verwendet werden, um zu bestimmen, ob der Fehler wegen (a) EOF oder (b) irgendeinem Fehler aufgetreten ist, aber ferror() gibt nicht an, welcher spezifische Fehler aufgetreten ist der zweite Fall. – calavicci