2009-10-26 6 views
5

Ich habe ein C-Dienstprogramm für Linux geschrieben, das den Inhalt von/proc/net/dev jede Sekunde überprüft. Ich öffne die Datei mit fopen ("/ proc/net/dev", "r") und dann fclose(), wenn ich fertig bin.Strategie öffnen/schließen für/proc Pseudodatei

Da ich eine "Pseudo" -Datei anstelle einer echten Datei verwende, ist es wichtig, ob ich die Datei jedes Mal öffne/schließe, wenn ich sie lese, oder sollte ich sie nur öffnen, wenn meine App startet und sie behält die ganze Zeit öffnen? Das Dienstprogramm wird als Daemon-Prozess gestartet und kann daher für eine lange Zeit ausgeführt werden.

Antwort

3

Es sollte nicht wichtig sein, nein. Es könnte jedoch Probleme mit dem Caching/Puffern geben, was bedeutet, dass es am besten (am sichersten) ist, wenn Sie es tun, und die Datei jedes Mal erneut zu öffnen. Da du es so selten tust, gibt es keine Leistung, wenn du es nicht machst, also würde ich empfehlen, deine derzeitige Lösung beizubehalten.

2

Was Sie wollen, ist ungepuffert lesen. Angenommen, Sie können nicht einfach zu read() -Aufrufen wechseln, öffnen Sie das Gerät und stellen Sie den Stream auf den ungepufferten Modus ein. Dies hat den zusätzlichen Vorteil, dass Sie den Stream nicht schließen müssen, wenn Sie fertig sind. Springe einfach zurück und fange erneut an zu lesen.

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