fanotify获取文件名,为什么/ proc / self / fd /“data-> fd”?

时间:2014-04-27 08:20:04

标签: linux filenames fanotify

我正在检查当前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"中提取的?

1 个答案:

答案 0 :(得分:0)

这是因为data->pid是一个具有不同文件描述符集的不同进程。 fanotify返回的data->fd在当前进程中有效,而不是受监控的进程。