Ein 50 Jahre alter Bug in C-Datei-E/A: Ein vererbtes Mysterium lüften
Bei der Verbesserung eines DOS-Emulators stieß ein Entwickler auf einen scheinbar trivialen Fehler in der Datei-E/A: Das Anhängen von Text an eine Datei mit dem Befehl `echo` ergab unerwartete Ergebnisse. Das Debugging ergab einen Fehler in der Art und Weise, wie C-Laufzeitbibliotheken zwischen Lesen und Schreiben umschalten, ein Fehler, der bis in die 1970er Jahre und sogar noch ältere UNIX-Systeme zurückreicht. Der Artikel geht auf den historischen Kontext ein, vom frühen K&R-C bis zu modernen C-Standards, und untersucht Implementierungsunterschiede zwischen verschiedenen UNIX-Versionen und C-Compilern. Die Hauptursache wird als Einschränkungen in der Behandlung des Aktualisierungsmodus durch die frühen C-Bibliotheken identifiziert, mit Variationen, wie verschiedene Betriebssysteme und Compiler mit diesen Einschränkungen umgegangen sind. Der Autor kommt zu dem Schluss, dass selbst heute für portablen C-Code ein expliziter `fseek`-Aufruf erforderlich ist, wenn zwischen Lesen und Schreiben einer Datei gewechselt wird.