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。