Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

423
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!