2012년 2월 13일 월요일

Linux에서 파일변경 알아내기

파일 변경을 알아내는 방법은 여러가지가 있다. 그중에 제일 생각하기 쉬운게 루프를 돌면서 짧은 시간에 한 번 씩 계속 검사하는 것이다.

...
while ( true )
{
lstat("myfile", &stat);
sleep(1);
}
...

그러나 뭔가 아름답지가 않다. 매번 파일을 검사하는 것도 후루꾸레머프로그래머 양심이 허락하지 않는다. 변경 했을 경우에만 이벤트가 날아왔으면 좋겠고, 그것을 받을 수 있는 방법에는 여러가지가 있다.

방법도 많은데, D-Bus+HAL은 나중에 따로 포스팅 하겠다. FAM은 SGI에서 만든 라이브러리인데, OS와 상관 없이 동일한 API를 제공해준다는 점이 매우 매력적이긴 하지만, D-Bus+HAL을 더 많이 쓰니, 가벼운 마음으로 넘어가자.

inotify는 리눅스에서만 제공하는 API로 dnotify 대체 버전이다. dnotify는 파일 변경 이벤트를 시그널로 받지만, inotify는 select/epoll 같은 멀티플렉서로부터 이벤트를 감지해낼 수 있다. 그외에도 히스토리나 장점은 위키백과(http://ko.wikipedia.org/wiki/Inotify)를 참조하자.

사실 inotify에 대해 자세히 서술하고 싶지만, 이미 IBM에서 더 이상 깔끔하게 설명할 수 없을 정도로 잘 써놓은 문서가 있어 굳이 다시 적지는 않겠다.

이 문서는 D-Bus+HAL에 대한 예고와 inotify라는 존재만 기록에 남기기 위한 것이다. (응?)