发布于2026-07-15 阅读(0)
扫一扫,手机访问
inotify 是 Linux 内核提供的一套文件系统事件监控机制,用大白话说,就是让应用程序能够实时“盯住”某个文件或目录,一有风吹草动——比如文件被创建、被删除、内容被修改——立刻就能收到通知。它给开发者准备了一组简洁的 API,在用户空间就能轻松调用。

那具体怎么上手呢?下面几个核心接口就是玩转 inotify 的关键:
初始化 inotify 实例:先调用 inotify_init(),它会创建一个新的 inotify 实例,返回一个文件描述符。后续所有的监控操作都要通过这个文件描述符来驱动——可以把它理解为整个监控系统的“遥控器”。
int fd = inotify_init();
if (fd < 0) {
// 错误处理
}
添加监控项:有了“遥控器”之后,用 inotify_add_watch() 告诉内核你想盯哪个文件或目录,以及关心哪些事件类型。比如下面这个例子,监控路径下文件的创建、删除和修改:
int wd = inotify_add_watch(fd, "/path/to/file_or_directory", IN_CREATE | IN_DELETE | IN_MODIFY);
if (wd < 0) {
// 错误处理
}
这里返回的 wd 是一个监控描述符,后续读取事件时会用到它来区分是哪个监控项产生的通知。
读取事件:监控设置好之后,通过 read() 从文件描述符中读取事件数据。每次 read() 会返回一个或多个 inotify_event 结构体,里面包含了发生的事件信息。
char buffer[4096];
ssize_t length = read(fd, buffer, sizeof(buffer));
if (length < 0) {
// 错误处理
}
// 解析 buffer 中的事件
inotify_event 结构体包含几个关键字段:
len:事件数据的长度mask:具体发生了哪种事件类型cookie:用于关联相关事件(比如文件的移动操作)name:发生变化的文件或目录名称(如果有的话)移除监控:如果某个文件或目录不再需要监控,调用 inotify_rm_watch() 把它摘掉就行:
int ret = inotify_rm_watch(fd, wd);
if (ret < 0) {
// 错误处理
}
关闭 inotify 实例:应用结束时,别忘了用 close() 关闭文件描述符,释放内核资源:
close(fd);
这几步就是 inotify 的基本用法。当然,真实场景下不会只跑一次就完事——通常需要一个循环持续读取事件,并且要处理好各种边界情况:比如监控项太多、事件爆发频率太高,都需要更精细地管理 inotify 实例和事件队列。如果你打算在生产环境里用它,建议提前踩一遍这些坑。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8