我正在检查当前fatrace的源代码。
调用fanotify获取数据值的主循环如下所示:
res = read (fan_fd, buffer, 4096);
...
data = (struct fanotify_event_metadata *) buffer;
while (FAN_EVENT_OK (data, res)) {
...
data = FAN_EVENT_NEXT (data, res);
}当它提取与事件关联的文件名时,代码如下所示:
snprintf (printbuf, sizeof (printbuf), "/proc/self/fd/%i", data->fd);
len = readlink (printbuf, pathname, sizeof (pathname));我搞不懂为什么文件名是从/proc/self/fd/"data->fd"而不是/proc/"data->pid"/fd/"data->fd"中提取的
发布于 2014-05-14 14:47:12
这是因为data->pid是一个具有不同文件描述符集合的不同进程。fanotify返回的data->fd在当前进程中有效,而不是被监控的进程。
https://stackoverflow.com/questions/23333723
复制相似问题