写一段监听文件写入的demo
时间: 2024-03-11 11:50:25 浏览: 226
广播监听的demo
好的,以下是一个使用inotify监听文件写入的简单demo,使用C++编写:
```c++
#include <iostream>
#include <unistd.h>
#include <sys/inotify.h>
#define EVENT_SIZE (sizeof(struct inotify_event))
#define BUF_LEN (1024 * (EVENT_SIZE + 16))
int main()
{
int fd, wd;
char buffer[BUF_LEN];
fd = inotify_init();
if (fd < 0) {
std::cerr << "Error: Failed to initialize inotify!" << std::endl;
return 1;
}
wd = inotify_add_watch(fd, "test.txt", IN_CLOSE_WRITE);
if (wd < 0) {
std::cerr << "Error: Failed to add watch for file!" << std::endl;
close(fd);
return 1;
}
std::cout << "Listening for file writes on test.txt..." << std::endl;
while (true) {
int len = read(fd, buffer, BUF_LEN);
if (len < 0) {
std::cerr << "Error: Failed to read inotify events!" << std::endl;
break;
}
int i = 0;
while (i < len) {
struct inotify_event* event = (struct inotify_event*) &buffer[i];
if (event->mask & IN_CLOSE_WRITE) {
std::cout << "File written: " << event->name << std::endl;
}
i += EVENT_SIZE + event->len;
}
}
inotify_rm_watch(fd, wd);
close(fd);
return 0;
}
```
这个demo会在当前目录下监听文件名为test.txt的文件,当该文件被写入时,会输出一条消息。具体实现是使用inotify机制进行的,通过inotify_init()函数初始化inotify实例,使用inotify_add_watch()函数添加要监听的文件或目录,并设置要监听的事件类型,这里我们设置为IN_CLOSE_WRITE,表示文件被写入后关闭。然后进入一个循环,使用read()函数读取inotify事件,然后遍历事件列表,如果有IN_CLOSE_WRITE事件,则输出文件名。最后使用inotify_rm_watch()函数移除监听,关闭inotify实例。
阅读全文