Um Bug de 50 Anos em E/S de Arquivos C: Desvendando um Mistério do Legado

2024-12-26

Ao melhorar um emulador DOS, um desenvolvedor encontrou um bug aparentemente trivial em E/S de arquivos: anexar texto a um arquivo usando o comando `echo` produziu resultados inesperados. A depuração revelou uma falha em como as bibliotecas de tempo de execução C lidam com a alternância entre leitura e escrita, uma falha que remonta à década de 1970 e até mesmo a sistemas UNIX anteriores. O artigo aprofunda o contexto histórico, do C K&R inicial aos padrões C modernos, explorando diferenças de implementação em várias versões do UNIX e compiladores C. A causa raiz é identificada como limitações no tratamento do modo de atualização pelas bibliotecas C iniciais, com variações em como diferentes sistemas operacionais e compiladores lidaram com essas limitações. O autor conclui que, mesmo hoje, para código C portátil, uma chamada `fseek` explícita é necessária ao alternar entre leitura e escrita de um arquivo.

Desenvolvimento E/S de arquivos bug legado