sirve que para manejo clase caracteristicas archivos archivo c embedded file-descriptor

c - manejo - java.io.file para que sirve



¿Es necesario cerrar descriptores de archivos antes de salir? (5)

Cerrar descriptores de archivos cuando haya terminado de usarlos hace que su código sea más reutilizable y más fácil de extender. Esto me suena a un caso en el que tienes una razón válida para dejar que se cierren automáticamente.

Por supuesto, la respuesta inmediata para la mayoría de las situaciones es "sí" , y soy un firme creyente de que un proceso debe limpiar correctamente todos los recursos que ha asignado, pero lo que tengo en mi situación es un daemon del sistema de larga ejecución que abre un número de descriptores de archivo al inicio y los cierra todos antes de salir.

Esta es una plataforma integrada, y estoy tratando de hacer que el código sea lo más compacto posible, sin introducir ningún estilo malo. Pero dado que los descriptores de archivos están cerrados antes de salir de todos modos, ¿sirve este código de limpieza del descriptor de archivos para cualquier propósito? ¿Siempre cierra todos los descriptores de archivos?


En el hermoso mundo de la plataforma integrada, es realmente difícil decir qué sucedería. Sin embargo, si estuviera en su situación, simplemente probaría manualmente para ver si realmente se lanzó la identificación del archivo. Y, si el espacio es tan importante, tal vez podría documentar este hecho en otro lugar.


Sí, cierre sus descriptores de archivos y libere toda la memoria del montón, incluso si sabe que el sistema operativo lo limpiará; de ese modo, cuando ejecuta valgrind o alguna herramienta similar, no obtiene mucho ruido en los resultados, y usted puede reconocer fácilmente las fugas "legítimas" de fd.


hombre 3 salida:

.... All open stdio(3) streams are flushed and closed. Files created by tmpfile(3) are removed.

Así que creo que leave main llama efectivamente a la función de salida con el valor de retorno de main. Aunque yo diría que es un mal estilo. Personalmente, siempre explícitamente envío / cierro cualquier recurso adquirido.


La única preocupación que tendría con respecto a dejar de cerrar los descriptores de archivos para la limpieza automática, sería cuánto te importan los datos que hayas escrito en dichos descriptores de archivos y si es razonable que puedas lidiar con una falla al escribir.

write () no necesita bloquear (dependiendo de cómo fue abierto () ed en primer lugar) y esperar a que los datos se confirmen con éxito, por lo que hay casos en que el cierre puede fallar porque el subsistema subyacente no puede confirmar la escritura pendiente. y así cierra las salidas con falla y establece errno para EIO, y dependiendo de lo que acaba de escribir, puede o no querer tomar alguna medida correctiva.

Es cierto que este es un caso de esquina en el que REALMENTE te preocupa la coherencia de los datos, es decir, las aplicaciones de tipo DBMS o el informe de éxito / falla de una copia de seguridad. En muchos (¿la mayoría?) Casos realmente no importa mucho, y estará bien dejarlo cerca () para procesar la limpieza / salida.