ruby - Kqueue dirextended 看什么动作?
问题描述
我在 OS X 上玩rb-kqueue,但我不知道如何让extend
标志触发。
从OpenBSD kqueue 手册页(也与 OS X 手册页匹配):
NOTE_EXTEND 描述符引用的文件被扩展
这是非常循环的。
NOTE_EXTEND 对于常规文件,描述符引用的文件被扩展。对于目录,报告作为重命名操作的结果添加或删除了目录条目。在目录内更改名称时不会报告 NOTE_EXTEND 事件。
这更具描述性,但是,我一直在目录上运行 kqueue 并尝试我可能无法触发扩展标志。我试过mv
, rename
, (因为搜索“扩展”会返回很多关于扩展属性的结果),使用and和重定向xattr
添加子目录和文件,但没有任何结果导致标志成为事件的一部分,只是和/或。mkdir
touch
extend
write
link
因此,我对extend
真正的东西感到困惑。仅仅是因为我在 OS X 上运行它吗?
解决方案
我希望对这个问题有所了解。
该标志NOTE_EXTEND
对应于对文件采取的操作。在您的情况下,您应该在文件大小增加时触发该操作。
推理
引用原始论文 - Kquote:通用且可扩展的事件通知工具:
fflags 字段用于指定应用程序在注册时感兴趣的描述符上的哪些操作,以及在返回时发生了哪些操作。可能的行动是:
- 注意删除
- 注意写
- 注意扩展
- 注释属性
- 注意链接
- 注意重命名
这些对应于文件系统对文件执行的操作,因此这里不再解释。如果发生了多个操作,这些注释可能会在返回的 kevent 中一起进行 OR-d。例如:一个文件被写入,然后重命名。最后一个通用过滤器是 PROC 过滤器,它检测过程变化。对于此过滤器,ident 字段被解释为进程标识符。此过滤器可以监视多种类型的事件,控制此过滤器的标志如图 3 所示
图 3 为EVFILT PROC
:
Input/Output
标志:
NOTE EXIT
进程退出。
NOTE FORK
进程调用 fork()
NOTE EXEC
进程通过 execve(2) 或类似调用执行了一个新进程。
NOTE TRACK
遵循跨 fork() 调用的过程。父进程将NOTE TRACK
在 flags 字段中返回 set,而子进程将NOTE CHILD
在 fflags 中返回 set,在 data 中返回父 PID。
Output
仅标志:
NOTE CHILD
这是一个名为 fork() 的 TRACKed 进程的子进程。
NOTE TRACKERR
如果系统无法将事件附加到子进程,则返回此标志,通常是由于资源限制。
推荐阅读
- c++ - SAP Netweaver。C++ 错误:无法读取内存
- oracle - 无效字符 - 输入参数的美元符号未解码
- angular - Angular 8 - How to resolve 'ExpressionChangedAfterItHasBeenCheckedError'
- javascript - Code execution not happening in asyn function
- react-native - How to query graphQL with variables from React-Native?
- java - 如何为来自服务器的文件添加静态资源位置,但与应用程序所在的服务器不同
- google-bigquery - Legacy SQL - 此查询如何编译?
- iis - 有没有办法检查应用程序池身份是否有效?
- python-3.x - uncompyle6的输出文件
- arrays - 我必须从键盘输入输入 (a) 和 (b)。我必须创建一个大小为 b 的数组。并从代码 c 打印嵌套循环的结果