#define _GNU_SOURCE /* needed to get the defines */
#include /* in glibc 2.2 this has the needed
values defined */
#include
#include
#include
static volatile int event_fd.
// 信号处理例程
static void handler(int sig, siginfo_t *si, void *data)
{
event_fd = si->si_fd.
}
int main(void)
{
struct sigaction act.
int fd.
// 登记信号处理例程
act.sa_sigaction = handler.
sigemptyset(&.act.sa_mask).
act.sa_flags = SA_SIGINFO.
sigaction(SIGRTMIN, &.act, NULL).
// 需要了解当前目录"."的情况
fd = open(".", O_RDONLY).
fcntl(fd, F_SETSIG, SIGRTMIN).
fcntl(fd, F_NOTIFY, DN_MODIFY|DN_CREATE|DN_MULTISHOT).
/* we will now be notified if any of the files
in "." is modified or new files are created */
while (1) {
// 收到信号后,就会执行信号处理例程。
// 而 pause() 也就结束了。
pause().
printf("Got event on fd=%d\n", event_fd).
}
} |