2009-10-26 2 views
5

매 초마다/proc/net/dev의 내용을 확인하는 Linux 용 C 유틸리티를 작성했습니다. fopen ("/ proc/net/dev", "r")을 사용하여 파일을 연 다음 fclose()를 실행하면 끝난다./proc 가상 파일 열기/닫기 전략

실제 파일이 아닌 '가상'파일을 사용하고 있기 때문에 파일을 읽을 때마다 파일을 열거 나 닫을 때 문제가 발생합니까 아니면 내 앱이 시작될 때 열어야합니까? 전체 시간을 열어? 이 유틸리티는 데몬 프로세스로 시작되므로 오랫동안 실행될 수 있습니다.

답변

3

중요하지 않습니다. 그러나 캐싱/버퍼링에는 문제가있을 수 있습니다. 실제로 수행 할 때 가장 안전한 (안전한) 방법이며 매번 파일을 다시 열어야합니다. 그렇게하는 일은 거의 없으므로 그렇게하지 않으면 얻지 못할 성능이 없으므로 현재 솔루션을 유지하는 것이 좋습니다.

2

원하는 것은 버퍼링되지 않은 읽기입니다. read() 호출로 전환 할 수 없다고 가정하고 장치를 연 다음 스트림을 버퍼링되지 않은 모드로 설정합니다. 이 작업을 완료하면 스트림을 닫을 필요가 없다는 추가적인 이점이 있습니다. 되감기하고 다시 읽으십시오.

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