Верхняя часть кода не может работать,
, потому что после того, как отслеживаемый mPath был изменен один раз
, select () никогда не заблокируется, даже когда я покинул подпрограмму "reload ()" пусто.
однако нижняя работает нормально
как это исправить? спасибо
int fd = inotify_init();
if (fd < 0) {
return;
}
int wd = inotify_add_watch(fd, mPath, IN_MODIFY | IN_DELETE);
while (1) {
#if 0 // FIXME select always return 1 after change once
fd_set fdr;
fd_set fdw;
FD_ZERO(&fdr);
FD_ZERO(&fdw);
FD_SET(fd, &fdr);
FD_SET(fd, &fdw);
int result = select(fd + 1, &fdr, NULL, NULL, NULL);
if (result == 1 && FD_ISSET(fd, &fdr)) {
reload();
}
#else
char buf[4096];
read(fd, buf, sizeof(buf));
reload();
#endif
}
inotify_rm_watch(fd, wd);
close(fd);