Primeiro, não há um motivo particularmente bom para usar fdopense fopené uma opção e opené a outra opção possível. Você não deveria ter usado openpara abrir o arquivo em primeiro lugar, se quiser FILE *. Portanto, incluir fdopennessa lista é incorreto e confuso porque não é muito parecido com os outros. Agora vou ignorá-lo porque a importante distinção aqui é entre um padrão C FILE *e um descritor de arquivo específico do SO.
Existem quatro razões principais para usar em fopenvez de open.
fopenfornece IO de buffer que pode ser muito mais rápido do que o que você está fazendo open.
fopen faz tradução de final de linha se o arquivo não for aberto no modo binário, o que pode ser muito útil se o seu programa for portado para um ambiente não-Unix (embora o mundo pareça estar convergindo apenas para LF (exceto redes baseadas em texto IETF) protocolos como SMTP e HTTP e outros)).
- A
FILE *oferece a capacidade de usar fscanfe outras funções do stdio.
- Algum dia, seu código precisará ser portado para outra plataforma que ofereça suporte apenas ao ANSI C e não à
openfunção.
Na minha opinião, a tradução de final de linha entra mais frequentemente em seu caminho do que ajuda você, e a análise de fscanfé tão fraca que você inevitavelmente acaba jogando fora em favor de algo mais útil.
E a maioria das plataformas que suportam C têm um open função.
Isso deixa a questão do buffer. Nos locais em que você está lendo ou gravando principalmente um arquivo sequencialmente, o suporte ao buffer é realmente útil e uma grande melhoria de velocidade. Mas isso pode levar a alguns problemas interessantes nos quais os dados não acabam no arquivo quando você espera que eles estejam lá. Você tem que lembrar defclose ou fflushnos momentos apropriados.
Se você estiver fazendo buscas (aka fsetposoufseek o segundo é um pouco mais difícil de usar de maneira compatível com os padrões), a utilidade do buffer diminui rapidamente.
Obviamente, meu preconceito é que eu tendem a trabalhar muito com soquetes, e existe o fato de que você realmente deseja fazer IO sem bloqueio (que FILE *falha totalmente no suporte de qualquer maneira razoável) sem buffer e muitas vezes requisitos complexos de análise realmente colorem minhas percepções.
fdopeneopenoufopeneopen?