我想构建一个用户空间工具来监视任何使用特定路径+名称打开不存在的文件的尝试(它不会出现在文件系统中)。
查看可用选项,最接近我需要的选项是使用kevent框架。
以下是由path
表示的监视文件的示例,它需要文件描述符。如果path
失败,可能有一个监视open
事件的每次访问的选项,因为该文件不存在。
fd = open(path, O_EVTONLY);
user_data = path;
/* Set up a list of events to monitor. */
vnode_events = NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_LINK | NOTE_RENAME | NOTE_REVOKE;
EV_SET( &events_to_monitor[0], fd, EVFILT_VNODE, EV_ADD | EV_CLEAR, vnode_events, 0, user_data);
int event_count = kevent(kq, events_to_monitor, NUM_EVENT_SLOTS, event_data, num_files, NULL);