Sie benötigen ein Handle, um Daten auf der Festplatte zu berühren. In C ist dieses Handle ein Zeiger, der von fopen zurückgegeben wird. Sie geben einen Modus an, erhalten einen Zeiger zurück und verwenden ihn zum Ein- oder Ausströmen von Daten. Die gebräuchlichsten Modi sind „r“ zum Lesen, „w“ zum Schreiben und „a“ zum Anhängen. Wenn Sie sie falsch verstehen, kann es zu Datenverlust oder zum Absturz Ihres Programms kommen.
Stellen Sie sich eine einfache Aufgabe vor: Schreiben Sie die Zahlen 1 bis 10 in eine Datei.
„c
int main() {
DATEI *f;
int x;
f=fopen(“out”,”w”);
if (!f) return 1;
for(x=1; x<=MAX; x++)
fprintf(f,"%d\n",x);
fclose(f);
0 zurückgeben;
}
„
Dieser Code öffnet eine Datei namens out im „w“-Modus. Dies ist ein destruktiver Schreibvorgang. Wenn out nicht existiert, wird es vom System erstellt. Wenn er vorhanden ist, wird der alte Inhalt gelöscht und ersetzt. Die Variable „f“ enthält den Dateizeiger. Sie verwenden diesen Zeiger für alle nachfolgenden Operationen. Wenn die Datei nicht geöffnet werden kann – Probleme mit den Berechtigungen, volle Festplatte oder Pfad nicht vorhanden – wird „f“ zu „NULL“.
Die Ausgabefunktion hier ist fprintf. Es funktioniert genau wie „printf“, aber Sie übergeben den Dateizeiger als erstes Argument. Sobald Sie fertig sind, gibt fclose die Ressource frei.
Umgang mit Dateifehlern in Main
Dieses Snippet ist das erste in der Reihe, das einen Fehlercode von „main“ zurückgibt. Wenn „fopen“ fehlschlägt, enthält „f“ einen Nullwert. In C wird Null als falsch ausgewertet. Alles andere ist wahr. Der „!“-Operator kehrt diese boolesche Logik um.
„if (!f)“ prüft, ob der Zeiger null ist. Es ist äquivalent zu „if (f == 0)“, aber ersteres ist die Standardsprache. Wenn die Bedingung wahr ist, gibt das Programm 1 zurück.
Auf UNIX-Systemen können Sie diesen Exit-Status direkt über die Befehlszeile überprüfen. Hier erfahren Sie, ob das Skript oder Programm erfolgreich ausgeführt wurde oder ob es Probleme gab. Wenn man weiß, wie man diese Fehler frühzeitig erkennt, erspart man sich später stundenlanges Debuggen.
Warum kümmern wir uns um Rückkehrcodes, wenn wir einfach abstürzen könnten? Denn kontrolliertes Scheitern ist besser als undefiniertes Verhalten. Sie können den Fehler protokollieren, den Benutzer benachrichtigen oder es erneut versuchen. Das Programm stillschweigend sterben zu lassen, ist faules Engineering.
Das Schöne an diesem Ansatz liegt in seiner Einfachheit. Du öffnest. Sie überprüfen. Du schreibst. Du schließt. Keine Magie. Kein versteckter Zustand. Nur ein Zeiger und eine Datei.
Aber was ist, wenn Sie lesen müssen, was Sie gerade geschrieben haben? Oder an ein vorhandenes Protokoll anhängen, ohne den Verlauf zu zerstören? Die Moduszeichenfolge ändert alles. „r“ lässt die Datei in Ruhe. „a“ fügt am Ende hinzu. „w“ haut es um. Wählen Sie sorgfältig aus.

















