Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

418
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda