Un bug vieux de 50 ans dans les E/S de fichiers C : percer le mystère d'un héritage
Lors de l'amélioration d'un émulateur DOS, un développeur a rencontré un bug apparemment anodin dans les E/S de fichiers : l'ajout de texte à un fichier à l'aide de la commande `echo` a produit des résultats inattendus. Le débogage a révélé un défaut dans la façon dont les bibliothèques d'exécution C gèrent la commutation entre la lecture et l'écriture, un défaut remontant aux années 1970 et même aux systèmes UNIX antérieurs. L'article approfondit le contexte historique, du C K&R initial aux normes C modernes, en explorant les différences d'implémentation entre les différentes versions d'UNIX et les compilateurs C. La cause première est identifiée comme des limitations dans la gestion du mode de mise à jour par les bibliothèques C initiales, avec des variations quant à la manière dont différents systèmes d'exploitation et compilateurs ont géré ces limitations. L'auteur conclut que, même aujourd'hui, pour un code C portable, un appel `fseek` explicite est nécessaire lors de la commutation entre la lecture et l'écriture d'un fichier.