2009-10-26 20 views
5

Napisałem narzędzie C dla systemu Linux, które sprawdza zawartość/proc/net/dev co sekundę. Otwieram plik za pomocą fopen ("/ proc/net/dev", "r"), a następnie fclose(), kiedy skończę.Strategia otwierania/zamykania dla/proc pseudo-pliku

Ponieważ używam pliku "pseudo" zamiast prawdziwego, czy ma to znaczenie, czy otwieram/zamykam plik za każdym razem, gdy go czytam, czy powinienem go otworzyć po uruchomieniu aplikacji i zachować ją otworzyć cały czas? Narzędzie jest uruchamiane jako proces demona i może działać przez długi czas.

Odpowiedz

3

To nie powinno mieć znaczenia, nie. Jednak mogą występować problemy z buforowaniem/buforowaniem, co oznacza, że ​​jest to najlepsze (najbezpieczniejsze) działanie w takim przypadku, a następnie ponownie otwórz plik za każdym razem. Ponieważ robisz to tak rzadko, nie można uzyskać wydajności, nie robiąc tego, więc poleciłbym zachować obecne rozwiązanie.

2

To, czego potrzebujesz, to niebuforowane czytanie. Zakładając, że nie możesz po prostu przełączyć się na wywołania read(), otwórz urządzenie, a następnie ustaw strumień w tryb niebuforowany. Ma to tę dodatkową zaletę, że po zakończeniu nie ma potrzeby zamykania strumienia. Po prostu przewiń i rozpocznij czytanie ponownie.

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