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。