C 如何查看特定路径?

C 如何查看特定路径?,c,freebsd,C,Freebsd,是否可以“监视”特定路径,并让内核在删除/写入/读取/创建该名称的文件或目录时通知我 注意:我正在寻找C语言的答案。我将接受一个用不同语言指向底层实现的答案(如果我能找到C代码)在Linux上,内核支持inotify,它允许监视特定的文件和目录。看起来FreeBSD也有类似的功能,它基于Linux“inotify”接口,名为。(我使用了inotify;但是,我自己没有使用pnotify) inotify不要求您编写内核模块。所有API都可以在用户空间中使用。正确初始化后,应用程序只需使用inot

是否可以“监视”特定路径,并让内核在删除/写入/读取/创建该名称的文件或目录时通知我


注意:我正在寻找C语言的答案。我将接受一个用不同语言指向底层实现的答案(如果我能找到C代码)

在Linux上,内核支持inotify,它允许监视特定的文件和目录。看起来FreeBSD也有类似的功能,它基于Linux“inotify”接口,名为。(我使用了inotify;但是,我自己没有使用pnotify)

inotify不要求您编写内核模块。所有API都可以在用户空间中使用。正确初始化后,应用程序只需使用inotify文件描述符调用
read()
,即可监视文件和/或目录活动。读取事件以结构形式出现:

struct inotify_event    
   {
   int      wd;       /* Watch descriptor */
   uint32_t mask;     /* Mask of events */
   uint32_t cookie;   /* Unique cookie associating related events */
   uint32_t len;      /* Size of name field */
   char     name[];   /* Optional null-terminated name */
   };

从我对pnotify的了解来看,它非常相似。

您应该看看kqueue接口。FreeBSD上不存在inotify


kqueue排在第一位,通常被认为是更好的接口

请参阅:@MeysamTolouee这似乎是我所寻找的以windows为中心的答案。也许这有帮助:在BSD中,kqueue。在linux中,inotify。或者你可以在gio中使用glib的包装器,它也可以使用win32,但有lgpl2许可证。@technosaurus很高兴知道;不幸的是,我仅限于自由软件,但我可以看到glib使用的API。您的链接是SUSE手册页,而不是FreeBSD手册页。这个答案使用了FreeBSD中不存在的API。我认为FreeBSD只是可以选择查看其他项目的手册页。检查下拉列表:它有netbsd、openbsd、多个版本的SUSE等。好的,我想我的答案现在更好了。通知url: