#include <sys/epoll.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/inotify.h>
#define EVENT_SIZE ( sizeof (struct inotify_event) )
#define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) )
int
main (int argc, char *argv[])
{
int i, epfd, nfds, fd;
int wd;
int length;
char buffer[BUF_LEN];
struct epoll_event ev, events[20];
epfd = epoll_create (256);
fd = inotify_init ();
wd = inotify_add_watch (fd, "/home/cc/tmp",
IN_MODIFY | IN_CREATE | IN_DELETE);
ev.data.fd = fd;
ev.events = EPOLLIN | EPOLLET;
epoll_ctl (epfd, EPOLL_CTL_ADD, fd, &ev);
for (;;)
{
nfds = epoll_wait (epfd, events, 20, 500);
for (i = 0; i < nfds; ++i)
{
if (events[i].data.fd == fd)
{
length = read (fd, buffer, BUF_LEN);
if (length < 0)
{
perror ("read");
}
while (i < length)
{
struct inotify_event *event =
(struct inotify_event *) &buffer[i];
if (event->len)
{
if (event->mask & IN_CREATE)
{
if (event->mask & IN_ISDIR)
{
printf ("The directory %s was created.\n",
event->name);
}
else
{printf ("The file %s was created.\n",
event->name);
}
}
else if (event->mask & IN_DELETE)
{
if (event->mask & IN_ISDIR)
{
printf ("The directory %s was deleted.\n",
event->name);
}
else
{
printf ("The file %s was deleted.\n",
event->name);
}
}
else if (event->mask & IN_MODIFY)
{
if (event->mask & IN_ISDIR)
{
printf ("The directory %s was modified.\n",
event->name);
}
else
{
printf ("The file %s was modified.\n",
event->name);
}
}
}
i += EVENT_SIZE + event->len;
}
}
}
}
return 0;
}
使用epoll + inotify监控文件
最新推荐文章于 2023-07-31 21:19:47 发布
本文展示了一个使用inotify和epoll结合的C程序示例,用于实时监控指定目录(/home/cc/tmp)下的文件创建、删除及修改事件。
2496

被折叠的 条评论
为什么被折叠?



