Existen cuatro razones principales para usar fopen en lugar de abrir.
fopen
te ofrece la buffering IO que pueden llegar a ser mucho más rápido que lo que está haciendo con open
.
fopen
hace que la línea termine la traducción si el archivo no se abre en modo binario, lo que puede ser muy útil si su programa alguna vez se transfiere a un entorno que no sea de Unix.
- A
FILE *
le da la posibilidad de usar fscanf
y otras funciones stdio.
- Su código puede algún día tener que ser portado a alguna otra plataforma que solo admita ANSI C y no admita la función
open
.
En mi opinión, la terminación de línea de traducción más a menudo se interpone en su camino que ayuda, y el análisis de fscanf es tan débil que inevitablemente termina lanzándolo a favor de algo más útil.
Y la mayoría de las plataformas que admiten C tienen una función open
.
Eso deja la pregunta de almacenamiento en búfer.En los lugares en los que principalmente lee o escribe un archivo secuencialmente, la compatibilidad con el almacenamiento en búfer es realmente útil y mejora la velocidad. Pero puede llevar a algunos problemas interesantes en los que los datos no terminan en el archivo cuando espera que estén allí. Debe recordar fclose
o fflush
en los momentos apropiados.
Si está haciendo búsquedas, la utilidad del almacenamiento en memoria intermedia disminuye rápidamente.
Por supuesto, mi tendencia es que tiendo a trabajar con sockets mucho, y ahí el hecho de que realmente quieres estar haciendo IO sin bloqueo (que FILE *
no admite totalmente de manera razonable) sin el almacenamiento en búfer y, a menudo tienen requisitos de análisis complejos realmente colorean mis percepciones.
¿Quisces decir 'fdopen' y' open' o 'fopen' y' open'? – user7116
¿No quieres decir fopen, not fdopen? – Omnifarious
'fopen' es parte de la biblioteca estándar de C,' open' no lo es. Use 'fopen' cuando escriba código portátil. – Aziz