Linux fanotify获取文件名,为什么/proc/self/fd/";数据->;fd";?
我正在检查当前fatrace的源代码 调用fanotify以获取数据值的主循环如下所示:Linux fanotify获取文件名,为什么/proc/self/fd/";数据->;fd";?,linux,filenames,fanotify,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); } 提取与
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”
?这是因为data->pid
是一个不同的进程,具有不同的文件描述符集。fanotify返回的数据->fd
在当前流程中有效,而不是被监控的流程。这是一个主观问题吗?两者是相同的;在一种情况下,操作系统代替PID,而在另一种情况下,程序员代替PID。它们是一样的吗?我的理解是,/proc/self/fd/“fd”将引用进程中调用snprintf的文件。但是data->pid指的是生成fan_事件的进程,它可能相同,但通常不相同。@MSalters两者不相同<代码>数据->pid不是当前进程的pid,而是具有文件活动的进程的pid。