GNU/Linux >> Tutoriales Linux >  >> Linux

C fopen vs abierto

Primero, no hay una razón particularmente buena para usar fdopen si fopen es una opción y open es la otra opción posible. No deberías haber usado open para abrir el archivo en primer lugar si desea un FILE * . Así que incluye fdopen en esa lista es incorrecta y confusa porque no se parece mucho a las demás. Ahora procederé a ignorarlo porque la distinción importante aquí es entre un estándar C FILE * y un descriptor de archivo específico del sistema operativo.

Hay cuatro razones principales para usar fopen en lugar de open .

  1. fopen le proporciona E/S de almacenamiento en búfer que puede resultar mucho más rápido que lo que está haciendo con open .
  2. fopen hace la traducción de final de línea 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 es de Unix (aunque el mundo parece estar convergiendo solo en LF (excepto las redes basadas en texto de IETF protocolos como SMTP y HTTP y similares)).
  3. A FILE * te da la posibilidad de usar fscanf y otras funciones de stdio.
  4. Es posible que algún día su código deba ser portado a alguna otra plataforma que solo admita ANSI C y no admita el open función.

En mi opinión, la traducción del final de línea se interpone más en tu camino que lo que te ayuda, y el análisis de fscanf es tan débil que inevitablemente terminas descartándolo en favor de algo más útil.

Y la mayoría de las plataformas que admiten C tienen un open función.

Eso deja la cuestión del almacenamiento en búfer. En lugares donde principalmente está leyendo o escribiendo un archivo secuencialmente, el soporte de almacenamiento en búfer es realmente útil y una gran mejora de la velocidad. Pero puede generar algunos problemas interesantes en los que los datos no terminan en el archivo cuando se espera que estén allí. Tienes que recordar fclose o fflush en los momentos apropiados.

Si estás haciendo búsquedas (también conocido como fsetpos o fseek el segundo de los cuales es un poco más complicado de usar de una manera compatible con los estándares), la utilidad del almacenamiento en búfer disminuye rápidamente.

Por supuesto, mi tendencia es que tiendo a trabajar mucho con sockets, y ahí está el hecho de que realmente quieres hacer E/S sin bloqueo (que FILE * falla por completo en brindar soporte de una manera razonable) sin almacenamiento en búfer y, a menudo, tiene requisitos de análisis complejos que realmente colorean mis percepciones.


fopen vs abierto en C

1) fopen es una función de biblioteca mientras open es una llamada al sistema .

2) fopen proporciona IO con búfer que es más rápido en comparación con open que es no almacenado en búfer .

3) fopen es portátil mientras open no portátil (abierto es específico del entorno ).

4) fopen devuelve un puntero a una estructura de ARCHIVO (ARCHIVO *); open devuelve un entero que identifica el archivo.

5) Un FILE * le da la posibilidad de utilizar fscanf y otras funciones de estudio.


open() es una llamada al sistema operativo de bajo nivel. fdopen() convierte un descriptor de archivo de nivel de sistema operativo en la abstracción de ARCHIVO de nivel superior del lenguaje C. fopen() llamadas open() en el fondo y le da un puntero de ARCHIVO directamente.

Hay varias ventajas en el uso de objetos FILE en lugar de descriptores de archivos sin procesar, que incluyen una mayor facilidad de uso pero también otras ventajas técnicas, como el almacenamiento en búfer incorporado. Especialmente el almacenamiento en búfer generalmente resulta en una ventaja de rendimiento considerable.


Linux
  1. Ubuntu – ¿Cómo abrir un archivo .bak en Linux?

  2. ¿Cómo abrir un archivo .8 con Man?

  3. Preguntas de la entrevista de Linux:Archivos abiertos / Descriptores de archivos abiertos

  4. ¿Es fopen () una función segura para subprocesos en Linux?

  5. abra un archivo con el programa predeterminado en node-webkit

Cómo abrir archivos ISO en Ubuntu Linux

Cómo descomprimir (abrir) un archivo Gz

Cómo abrir un archivo en Linux

Cómo cambiar el límite de archivos abiertos en Linux

¿Cómo crear, extraer o abrir un archivo RAR en Linux?

Cómo abrir el administrador de archivos de Ubuntu como usuario root