Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

415
Vistas
¿Es necesario cerrar un número de archivo cada vez que se abre en el programa?

Si el archivo se abre con fopen() y en un modo diferente, ¿es necesario cerrarlo varias veces o se puede cerrar una vez al final del código?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Cada vez que abra el archivo, recibirá diferentes descriptores de archivo o identificadores de archivo. Por lo tanto, debe cerrar cada controlador de archivo usando fclose() si se abre a través de fopen() o close() si se abre a través open() .

over 4 years ago · Santiago Trujillo Denunciar

0

La función open es la primitiva subyacente de las funciones fopen y freopen , que crean secuencias.

 int open (const char *filename, int flags[, mode_t mode])

que crea y devuelve un nuevo descriptor de archivo para el archivo nombrado por filename . El mode de argumento se usa solo cuando se crea un archivo, pero no está de más proporcionar el argumento en cualquier caso.

Por lo tanto, cada vez que se llama un archivo open o fopen , se crea un nuevo descriptor de archivo y estos descriptores permanecen asignados hasta que finaliza el programa.

La función close o fclose cierra los campos del descriptor de archivo. Cerrar un expediente tiene las siguientes consecuencias:

  • El descriptor de archivo se desasigna.
  • Cualquier bloqueo de registros propiedad del proceso en el archivo se desbloquea.
  • Cuando se han cerrado todos los descriptores de archivo asociados con una canalización o FIFO, se descartan todos los datos no leídos.

Si open o fopen y no close , ese descriptor no se limpiará y persistirá hasta que se cierre el programa.

El problema será grave si hay muchas llamadas open o cualquier archivo puede abrirse potencialmente varias veces (sin cerrar cada vez), entonces los descriptores se filtrarán , hasta que el sistema operativo se niegue o no pueda crear otro descriptor, en en cuyo caso, la llamada a fopen falla y el programa puede fallar.

En la mayoría de los sistemas operativos POSIX, incluidos Linux y Os X, a cada proceso se le asigna una tabla fija de identificadores de archivos o descriptores de archivos. Por lo general, se trata de 1024 identificadores. Cuando intenta abrir el descriptor de archivo 1025, el sistema operativo elimina su proceso.

El problema es casi seguro que está filtrando identificadores de archivos. Es decir, las manijas se abren y, una vez que haya terminado con ellas, no se cierran.

Para evitar la fuga del descriptor, debe close o fclose antes de volver a abrir un archivo cada vez.

Eche un vistazo a lo que GNU describió sobre la apertura y el cierre de archivos .

over 4 years ago · Santiago Trujillo Denunciar

0

Tienes que cerrarlos todos.

Cuando usa llamadas al sistema de familia open , le devuelven un file-descriptor ( fopen devuelve FILE* que es básicamente una estructura que contiene el descriptor de archivo. Eche un vistazo a la definición de ARCHIVO).

 typedef struct { short level ; short token ; short bsize ; char fd ; <-- here unsigned flags ; unsigned char hold ; unsigned char *buffer ; unsigned char * curp ; unsigned istemp; }FILE ;

Como resultado fopen() le dará dos ARCHIVOS* diferentes (y descriptores de archivo diferentes obviamente) que debería close()/fclose() finalmente.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda