Linux signal 目录小监控
当前目录下发生修改后,发出通知:
The Code
#define _GNU_SOURCE #include #include #include #include static volatile int event_fd; static volatile int event_sig; static volatile void *event_data; static void handler(int sig, siginfo_t *si, void *data) { event_fd = si->si_fd; event_sig = sig; event_data = data; } int main(void) { struct sigaction act; int fd; act.sa_sigaction = handler; sigemptyset(&act.sa_mask); act.sa_flags = SA_SIGINFO; sigaction(SIGRTMIN + 1, &act, NULL); fd = open(".", O_RDONLY); fcntl(fd, F_SETSIG, SIGRTMIN + 1); fcntl(fd, F_NOTIFY, DN_ACCESS|DN_MODIFY|DN_CREATE|DN_RENAME|DN_DELETE|DN_ATTRIB|DN_MULTISHOT); while (1) { pause(); printf("Sth happened on fd=%d\n", event_fd); } }

Discussion