Linux C,通过inotify机制判断/home/usr/a.txt文件是否被创建和更新,如果有创建和更新则打印文件名称,示例代码
时间: 2024-01-14 14:02:39 浏览: 135
以下是使用inotify机制实现检测/home/usr/a.txt文件的创建和更新并打印文件名的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#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) {
perror("inotify_init");
exit(EXIT_FAILURE);
}
wd = inotify_add_watch(fd, "/home/usr/a.txt", IN_CREATE | IN_MODIFY);
if (wd < 0) {
perror("inotify_add_watch");
exit(EXIT_FAILURE);
}
while (1) {
int length = read(fd, buffer, BUF_LEN);
if (length < 0) {
perror("read");
exit(EXIT_FAILURE);
}
int i = 0;
while (i < length) {
struct inotify_event *event = (struct inotify_event *)&buffer[i];
if (event->len) {
if (event->mask & IN_CREATE || event->mask & IN_MODIFY) {
printf("File %s was created or modified.\n", event->name);
}
}
i += EVENT_SIZE + event->len;
}
}
inotify_rm_watch(fd, wd);
close(fd);
return 0;
}
```
代码解释:
1. 使用inotify_init函数初始化inotify实例,并创建文件描述符fd。
2. 使用inotify_add_watch函数添加对/home/usr/a.txt文件的监视,监视文件创建和修改事件。
3. 进入无限循环,使用read函数读取inotify实例返回的事件,并处理事件。
4. 当检测到文件创建或修改事件时,打印文件名。
5. 使用inotify_rm_watch函数删除监视,关闭文件描述符fd。
注意:以上代码中使用了无限循环,需要手动中断程序。可以使用信号处理机制等方式来实现优雅的退出。
阅读全文