A.2. Wake-ups


许多应用会扫描配置文件以进行更改。在很多情况下,扫描以固定间隔执行,例如每分钟的一次。这可能会有问题,因为它会强制磁盘从启动中唤醒。最好的解决方法是找到一个良好的间隔、一个良好的检查机制,或使用 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 page。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.