Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
A.2. wake-ups
多くのアプリケーションは、設定ファイルの変更をスキャンします。多くの場合、スキャンは 1 分ごとに 1 つずつ実行されます。これは、ディスクをスピンダウンからウェイクアップさせるため、問題が発生する可能性があります。最善の解決策は、適切な間隔の検索、適切なチェックメカニズム、または inotify で変更を確認し、イベントに反応することです。inotify は、ファイルまたはディレクトリーに関するさまざまな変更を確認できます。
以下に例を示します。
#include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <sys/types.h> #include <sys/inotify.h> #include <unistd.h> int main(int argc, char *argv[]) { int fd; int wd; int retval; struct timeval tv; fd = inotify_init(); /* checking modification of a file - writing into */ wd = inotify_add_watch(fd, "./myConfig", IN_MODIFY); if (wd < 0) { printf("inotify cannot be used\n"); /* switch back to previous checking */ } fd_set rfds; FD_ZERO(&rfds); FD_SET(fd, &rfds); tv.tv_sec = 5; tv.tv_usec = 0; retval = select(fd + 1, &rfds, NULL, NULL, &tv); if (retval == -1) perror("select()"); else if (retval) { printf("file was modified\n"); } else printf("timeout\n"); return EXIT_SUCCESS; }
このアプローチの利点は、実行できるさまざまなチェックです。
主な制限は、システムで限られた数の監視のみが利用可能であることです。数値は
/proc/sys/fs/inotify/max_user_watches
から取得できますが、変更可能ですが、これは推奨されません。さらに、inotify が失敗した場合、コードは異なるチェック方法にフォールバックする必要があります。これは通常、ソースコードで多くの #if #define
が発生することを意味します。
inotify の詳細は、inotify(7) の man ページを参照してください。