Un error de 50 años en E/S de archivos C: Desentrañando un misterio del legado

2024-12-26

Mientras mejoraba un emulador DOS, un desarrollador se encontró con un error aparentemente trivial en E/S de archivos: anexar texto a un archivo usando el comando `echo` produjo resultados inesperados. La depuración reveló un fallo en cómo las bibliotecas de tiempo de ejecución C manejan el cambio entre lectura y escritura, un fallo que se remonta a la década de 1970 e incluso a sistemas UNIX anteriores. El artículo profundiza en el contexto histórico, desde el C K&R inicial hasta los estándares C modernos, explorando diferencias de implementación en varias versiones de UNIX y compiladores C. La causa raíz se identifica como limitaciones en el manejo del modo de actualización por las bibliotecas C iniciales, con variaciones en cómo diferentes sistemas operativos y compiladores abordaron estas limitaciones. El autor concluye que, incluso hoy, para código C portátil, una llamada `fseek` explícita es necesaria al cambiar entre lectura y escritura de un archivo.