2009-10-26 13 views
5

He escrito una utilidad C para Linux que comprueba los contenidos de/proc/net/dev una vez por segundo. Abrí el archivo usando fopen ("/ proc/net/dev", "r") y luego fclose() cuando terminé.Estrategia de abrir/cerrar para el pseudo archivo/proc

Dado que estoy usando un archivo 'pseudo' en lugar de uno real, ¿Importa si abro/cierro el archivo cada vez que leo de él, o debería simplemente abrirlo cuando se inicia mi aplicación y conservarlo? abrir todo el tiempo? La utilidad se inicia como un proceso de daemon y, por lo tanto, puede ejecutarse durante mucho tiempo.

Respuesta

3

No debería importar, no. Sin embargo, puede haber problemas con el almacenamiento en memoria caché/almacenamiento en búfer, lo que significa que es realmente mejor (más seguro) hacer lo que haces, y volver a abrir el archivo cada vez. Debido a que lo hace tan pocas veces, no se gana ningún rendimiento al no hacerlo, por lo que le recomendaría mantener su solución actual.

2

Lo que quiere es lectura sin búfer. Suponiendo que no puede simplemente cambiar a las llamadas de lectura(), abra el dispositivo y luego configure la transmisión en el modo sin búfer. Esto tiene la ventaja adicional de que no hay necesidad de cerrar la transmisión cuando termines. Solo rebobínelo y comience a leer nuevamente.

FILE *f = fopen("/proc/net/dev", "r"); 
setvbuf(f, NULL, _IONBF, 0); 
while (running) 
{ 
    rewind(f); 
    ...do your reading... 
} 
Cuestiones relacionadas