#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;
}
分享到:
相关推荐
inotify,epoll
`epoll`的核心在于`epoll_ctl`(用于添加、删除和修改监控的文件描述符)和`epoll_wait`(用于等待事件发生)这两个函数。`epoll`利用了内核的红黑树数据结构和事件队列,实现了高效的事件分发。在内核源码中,`...
总之,Linux INotify机制为开发者提供了一种强大且灵活的工具,用于实时监控文件系统的变更,对于需要实时响应文件变化的应用程序,如文件同步、日志监控、索引更新等场景,有着极其重要的作用。通过理解和正确使用...
4. **文件系统事件监控(inotify)**:在Linux中,可以使用`inotify`API来监控文件系统事件,如进程的创建和删除,这可以帮助我们实时发现进程的启动和退出。 5. **守护进程(Daemon)**:为了持续监控进程,我们...
实现文件监控功能,我们可以利用操作系统提供的文件系统通知机制,如Windows的FindFirstChangeNotification和FindNextChangeNotification,或者在Unix/Linux系统中的inotify。下面我们将深入探讨这两种方法。 1. **...
- **监控文件事件**:使用epoll和inotify等技术监控文件变化。 - **信号处理**:信号的发送与捕获。 - **高级定时器机制**:高级定时器的设计与实现。 - **进程创建与结束**:进程的生命周期管理。 - **程序执行**:...
9. **Linux特定特性**:除了标准的UNIX接口,书中还介绍了Linux特有的功能,如epoll用于高效I/O多路复用,inotify用于文件系统监控,以及/proc文件系统等。 这本书不仅适合Linux开发者,由于其对POSIX标准的重视,...
然而,Python通常会使用`inotify`模块来监控文件系统的变化,或者使用`epoll`或`poll`来监听套接字和其他I/O事件。对于键盘事件,Linux没有提供像Windows那样的全局键盘钩子。但你可以通过读取`/dev/input/event*`...
监视文件状态变化可能是通过`inotify`系统调用实现的,可以实时跟踪文件或目录的创建、修改、删除等事件,这对于文件监控和日志处理非常有用。 在`Test_ev`这个测试文件中,可能包含了对上述功能的示例代码或测试...
- 使用 `inotify` 或者 `poll()` 来监听文件变化。 **2. 高并发Web服务器实现** - Web服务器需要能够处理大量的并发连接。 - 利用多线程或多进程模型可以有效提升并发能力。 - 考虑到资源占用和上下文切换开销,...
10. **Linux特定特性**:除了标准的UNIX接口,书中还特别关注了Linux特有的功能,如epoll用于高并发I/O事件的通知,inotify用于文件系统变化监控,以及/proc文件系统对内核状态的访问。 这本书不仅适用于Linux...
本书不仅关注标准的UNIX接口(如POSIX.1-2001/SUSv3和POSIX.1-2008/SUSv4),还特别强调了Linux特有的功能,如epoll用于高效的I/O事件通知,inotify用于文件系统监控,以及/proc文件系统用于系统状态查询。...
此外,还有一些特定于Linux的系统调用,如`epoll`用于高效I/O事件处理,以及`inotify`用于文件系统监控。 通过深入理解这些C函数和系统调用,Linux开发者能够更好地利用系统的强大功能,编写出高效且可靠的程序。在...
监控网卡 patch: deb: portal: dpkg-symbols 内核初始化 nsq队列: ? linux inotify: rtc: linux不支持5G: 802-1.x: 下一代工业通信—TSN(时间敏感网络),工业物联网的助推器:QCA TSN相关协议标准 beacon帧字段...
3. **Linux特定函数**:Linux系统提供了一些特有的函数,如`openpty`用于创建伪终端,`epoll`用于高性能的I/O事件多路复用,`inotify`用于文件系统变化监控等。 4. **C++的系统交互**:虽然C++不是原生的系统编程...