나는 inotify와 관련된 질문을 검색했는데, 이것은 다소 다릅니다 ...C에서 inotify를 사용하는 방법?
하나의 파일 (디렉토리가 아님)의 변경을 모니터링하기 위해 다음 코드를 사용합니다. 테스트에서 target 파일을 저장할 때 read()가 반환됩니다. 이는 대상 파일이 작동 함을 의미합니다. 그러나 event-> mask는 32768이며 이는 IN_MODIFY가 아니며 name은 비어 있습니다. 또 다른 문제는 지속적으로 모니터링 할 수 없다는 것입니다. 파일을 두 번째로 변경하면 응답이 없습니다. 도와 주셔서 감사합니다!
#include <sys/inotify.h>
#include <unistd.h>
#include <stdio.h>
#define EVENT_SIZE (sizeof (struct inotify_event))
#define BUF_LEN (16 * (EVENT_SIZE + 16))
int main()
{
int fd;
fd = inotify_init();
if (fd < 0)
perror("inotify_init()");
int wd;
wd = inotify_add_watch(fd, "target.txt", IN_MODIFY);
if (wd < 0)
perror("inotify_add_watch");
char buf[BUF_LEN];
int len;
start:
len = read(fd, buf, BUF_LEN);
if (len > 0)
{
int i = 0;
while (i < len)
{
struct inotify_event *event;
event = (struct inotify_event *) &buf[i];
printf("wd=%d mask=%x cookie=%u len=%u\n",
event->wd, event->mask,
event->cookie, event->len);
if (event->mask & IN_MODIFY)
printf("file modified %s", event->name);
if (event->len)
printf("name=%s\n", event->name);
i += EVENT_SIZE + event->len;
}
}
goto start;
return 0;
}
이있어, 감사합니다! vim과 cat을 사용하여 대상 파일을 수정하는 사이에 다른 동작을 관찰했습니다. 파일을 모니터링하기 위해 wd를 사용하여 파일 이름을 검색 할 수 있습니다. – user180574