Wenn ein Aufruf von fread() 0 zurückgibt und ferror() einen Fehler (vs. EOF) anzeigt, ist es OK, den Lesevorgang erneut zu versuchen, oder ist es besser, die Datei zu schließen und erneut zu öffnen?Was ist ein guter Weg, um sich von einem Fehler fread() zu erholen?
Ich kann nicht von vorne anfangen - die Eingabedatei wurde teilweise auf eine Weise verarbeitet, die nicht rückgängig gemacht werden kann (sagen wir schreibe ein Stück auf einmal zu einem Socket und aufgrund vorhandener Protokoll , habe keine Möglichkeit, das entfernte Ende zu sagen, "egal, ich muss von vorne anfangen").
Ich könnte fclose() und fopen() die Datei fseek() hinter die bereits verarbeiteten Daten stellen und die fread() - Anweisung von dort fortsetzen, aber ist das alles notwendig?
Wie kann ich feststellen, welche Art von Fehler mit fread() aufgetreten ist? Ich denke nicht, dass errno eingestellt wird (zumindest nicht gemäß dem C-Standard). fread() wird korrekt aufgerufen, das Problem liegt beim zugrunde liegenden Dateisystem. – Dan
ferror() gibt bei einem Fehler ungleich Null zurück. Verwenden Sie dieses Ergebnis, um nach bestimmten Fehlern zu suchen, oder übergeben Sie perror()/strerror, um zu sehen, was Sie bekommen. – dwc