gpt4 book ai didi

linux - 使用 inotify 的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:36 26 4
gpt4 key购买 nike

我想在 Linux 上使用 inotify 机制。我希望我的应用程序知道文件 aaa 何时发生更改。您能给我提供一个示例吗?

最佳答案

inotify C API

inotify 提供了三个系统调用来构建各种文件系统监视器:

  • inotify_init() 在内核中创建 inotify 子系统的实例,成功时返回文件描述符,失败时返回 -1。与其他系统调用一样,如果 inotify_init() 失败,请检查 errno 进行诊断。
  • inotify_add_watch(),顾名思义,添加一个 watch 。每个监视必须提供路径名和相关事件列表,其中每个事件由常量指定,例如 IN_MODIFY。要监视多个事件,只需在每个事件之间使用逻辑或(C 中的管道 (|) 运算符)即可。如果inotify_add_watch()成功,调用将返回已注册 watch 的唯一标识符;否则,返回-1。使用标识符更改或删除关联的 watch 。
  • inotify_rm_watch() 删除 watch 。

还需要read()close()系统调用。给定由 inotify_init() 生成的描述符,调用 read() 等待警报。假设一个典型的文件描述符,应用程序会阻塞以等待事件的接收,这些事件在流中表示为数据。从 inotify_init() 生成的文件描述符上的通用 close() 会删除并释放所有事件监视以及与 inotify 实例关联的所有内存。 (典型的引用计数警告也适用于此。在释放监视和 inotify 消耗的内存之前,必须关闭与实例关联的所有文件描述符。)

#include "inotify.h"  
#include "inotify-syscalls.h"
int wd;
wd = inotify_add_watch (fd,
"/home/rlove/Desktop", IN_MODIFY | IN_CREATE | IN_DELETE);
if (wd < 0)
perror ("inotify_add_watch");

此示例在目录/home/rlove/Desktop 上添加一个监视,以监视任何修改、文件创建或文件删除。

关于linux - 使用 inotify 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24470157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com