Page Actions
Wiki Actions
User Actions
Submit This Story

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

Enter your comment
 
 
blog/2009/10/linux_signal_目录小监控.txt · Last modified: 2009/10/01 00:00 (external edit)     Back to top
Recent changes RSS feed Creative Commons License Powered by PHP Driven by DokuWiki