Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
A.2. 喚醒功能
許多應用程式會掃描配置檔,看有沒有變化。在許多情形下,這掃描會在固定的時間間隔下進行,例如每分鐘執行一次。這可能會造成問題,因為它會喚醒已經降速的硬碟。最好的方法是找到最適合的時間間隔、更好的檢查機制,或使用 inotify 來檢查變更並重新啟動事件。inotify 可以檢查檔案或目錄的多種變化。
例如:
int fd; fd = inotify_init(); int wd; /* checking modification of a file - writing into */ wd = inotify_add_watch(fd, "./myConfig", IN_MODIFY); if (wd < 0) { inotify_cant_be_used(); switching_back_to_previous_checking(); } ... fd_set rdfs; struct timeval tv; int retval; FD_ZERO(&rdfs); FD_SET(0, &rdfs); tv.tv_sec = 5; value = select(1, &rdfs, NULL, NULL, &tv); if (value == -1) perror(select); else { do_some_stuff(); } ...
這方法的好處是可以進行多樣化的檢查。
主要的限制是一台系統上只會有限定的觀察數量。這數量可以從
/proc/sys/fs/inotify/max_user_watches
得知;雖然這個值可以改變,但不建議您這樣作。同時,如果 inotify 失效的話,程式碼就會回到不同檢查方式,這多半意味著原始碼的 #if #define
會常常發生。
欲知 inotify 的詳情,請參閱 inotify 的 man page。