KQUEUE 仅适用于文件夹路径
KQUEUE only works for folder path?
我正在使用代码(实际上是从这里复制FSEvents C++示例),如下所示,但它只能用于路径,不能用于文件。我只想监视特定文件。我该怎么做?谢谢
#include <fcntl.h> // for O_RDONLY
#include <stdio.h> // for fprintf()
#include <stdlib.h> // for EXIT_SUCCESS
#include <string.h> // for strerror()
#include <sys/event.h> // for kqueue() etc.
#include <unistd.h> // for close()
int main (int argc, const char *argv[])
{
int kq = kqueue ();
// dir name is in argv[1], NO checks for errors here
int dirfd = open (argv[1], O_RDONLY);
struct kevent direvent;
EV_SET (&direvent, dirfd, EVFILT_VNODE, EV_ADD | EV_CLEAR | EV_ENABLE,
NOTE_WRITE, 0, (void *)argv[1]);
kevent(kq, &direvent, 1, NULL, 0, NULL);
// Register interest in SIGINT with the queue. The user data
// is NULL, which is how we'll differentiate between
// a directory-modification event and a SIGINT-received event.
struct kevent sigevent;
EV_SET (&sigevent, SIGINT, EVFILT_SIGNAL, EV_ADD | EV_ENABLE, 0, 0, NULL);
// kqueue event handling happens after the legacy API, so make
// sure it doesn eat the signal before the kqueue can see it.
signal (SIGINT, SIG_IGN);
// Register the signal event.
kevent(kq, &sigevent, 1, NULL, 0, NULL);
while (1) {
// camp on kevent() until something interesting happens
struct kevent change;
if (kevent(kq, NULL, 0, &change, 1, NULL) == -1) { exit(1); }
// The signal event has NULL in the user data. Check for that first.
if (change.udata == NULL) {
break;
} else {
// udata is non-null, so it's the name of the directory
printf ("%sn", (char*)change.udata);
}
}
close (kq);
return 0;
}
您缺少对文件执行哪些操作?
请注意,许多写入文件的内容不会打开现有文件并写入它;它们会取消现有文件的链接并将其替换为新文件。因此,kqueue()
不会报告您打开的文件已被写入。 您可以将NOTE_DELETE
添加到fflags
以尝试捕获它。
相关文章:
- 如何将更多文件夹添加到c++include路径
- [android ndk]如何获取资产文件夹中文件的绝对路径?
- 获取 exe 文件夹路径的最佳方法?
- cmake find_package CMakeLists.txt 子文件夹中的相对路径
- 从 FutureAccessList 同步获取文件夹路径
- 如何将用于创建文件的文件的路径提供给C++中的其他文件夹
- Boost Filesystem flowly_caronical不会在没有父文件夹的情况下解决相对路径
- C/C++ 从根位置搜索文件夹并返回绝对路径
- C++ 程序 [窗口] 的资产文件夹路径
- C 获取目录路径,解析文件夹名称和来自Parent Directory的打印文件内容
- 代码块,添加了环境变量路径,但在安装文件夹之外出现 g++ 错误
- 仅资源 DLL - 文件夹、路径
- 如何获取哪些快捷方式和文件在桌面等文件夹路径中突出显示
- 通过浏览按钮仅获取文件夹路径
- 如何删除回收站中路径过长的文件夹或文件
- KQUEUE 仅适用于文件夹路径
- 使用字符串在C++中指定文件路径(将文件存储在文件夹中)
- Windows 8:如何以编程方式读取用户文档文件夹路径(使用 c)
- 如何获取完整路径的文件夹和文件部分
- 在Windows运行时组件中使用WRL获取文件夹路径返回空字符串