inotify监听文件并通知
static int inotify_dbfile(const char *spFromRule, const char *spDevFile) { int inotifyFd; int watchfd1; int watchfd2; char buf[BUF_LEN]; size_t numRead; char *spfile; struct inotify_event *event; int ret = 0; /* 初始化inotify实例 */ if (-1 == (inotifyFd = inotify_init ())) { LOG_ERROR("Error: Inotify Initialization is failed.."); exit(1); } /* 循环所有输入目录,设置监视 */ if (-1 == (watchfd1 = inotify_add_watch (inotifyFd, spFromRule, event_mask))) { LOG_ERROR("Error: Inotify Watch [%s] is failed..", spFromRule); exit(2); } if (-1 == (watchfd2 = inotify_add_watch (inotifyFd, spDevFile, event_mask))) { LOG_ERROR("Error: Inotify Watch [%s] is failed..", spDevFile); exit(2); } while (1) { /* Read events forever */ if (1 > (numRead = read(inotifyFd, buf, BUF_LEN))) { LOG_ERROR("read() from inotify fd returned 0!"); puts("read() from inotify fd returned 0!"); exit(4); } /* 处理read()返回的缓冲区中的所有事件 */ for (spfile = buf; spfile < buf + numRead; ) { event = (struct inotify_event *) spfile; if ((event->mask & IN_MODIFY)) { LOG_INFO("INFO: Inotify Watch file is modified..."); ret = 1; goto end; } spfile += sizeof(struct inotify_event) + event->len; } } end: inotify_rm_watch(inotifyFd, watchfd1); inotify_rm_watch(inotifyFd, watchfd2); close(inotifyFd); return ret; }