如何通过系统API设置实时监控文件夹变动并发出预警?

2026-05-06 19:101阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1112个文字,预计阅读时间需要5分钟。

如何通过系统API设置实时监控文件夹变动并发出预警?

它不是轮询,而是内核级异步通知,延迟低、资源省。Windows原生方案中没比它更稳定的。但需配合重叠I/O和手动解析缓冲区,不能直接在回调函数中使用。

常见错误现象:ERROR_IO_PENDING 被当成失败处理;缓冲区太小导致事件丢失;没处理好“重命名后又新建同名文件”这类边界情况。

  • 必须用 FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED 打开目录句柄
  • 监控掩码选 FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE 覆盖多数预警场景
  • 缓冲区建议 ≥ 8KB(sizeof(FILE_NOTIFY_INFORMATION) * 128),小于 4KB 极易截断
  • 每次读完要手动遍历 FILE_NOTIFY_INFORMATION 链表,NextEntryOffset 为 0 才算结束

Linux 下优先用 inotify,别碰 dnotify 或轮询

inotify 是目前最轻量、最通用的方案,glibc 封装少,基本就是裸调 inotify_init1inotify_add_watchread。注意它不递归,子目录要单独加 watch。

阅读全文
标签:C

本文共计1112个文字,预计阅读时间需要5分钟。

如何通过系统API设置实时监控文件夹变动并发出预警?

它不是轮询,而是内核级异步通知,延迟低、资源省。Windows原生方案中没比它更稳定的。但需配合重叠I/O和手动解析缓冲区,不能直接在回调函数中使用。

常见错误现象:ERROR_IO_PENDING 被当成失败处理;缓冲区太小导致事件丢失;没处理好“重命名后又新建同名文件”这类边界情况。

  • 必须用 FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED 打开目录句柄
  • 监控掩码选 FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE 覆盖多数预警场景
  • 缓冲区建议 ≥ 8KB(sizeof(FILE_NOTIFY_INFORMATION) * 128),小于 4KB 极易截断
  • 每次读完要手动遍历 FILE_NOTIFY_INFORMATION 链表,NextEntryOffset 为 0 才算结束

Linux 下优先用 inotify,别碰 dnotify 或轮询

inotify 是目前最轻量、最通用的方案,glibc 封装少,基本就是裸调 inotify_init1inotify_add_watchread。注意它不递归,子目录要单独加 watch。

阅读全文
标签:C