2
현재 fatrace의 소스 코드를 검사하고 있습니다.파일 이름을 가져 오는 것을 fanotify하는 이유는/proc/self/fd/"data-> fd"입니까?
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));
데이터의 값을 구하는 fanotify 호출 메인 루프 같다 파일명이 /proc/self/fd/"data->fd"
에서 추출되었고 /proc/"data->pid"/fd/"data->fd"
이 아닌 이유가 혼란 스럽습니다.
주관적인 질문입니까? 둘 다 동일합니다. 어떤 경우에는 OS가 PID를 대체하고 다른 경우에는 프로그래머가 대체합니다. – MSalters
그들은 같은가요? 나의 이해는/proc/self/fd/"fd"가 snprintf를 호출하는 프로세스에서 파일을 참조한다는 것이다. 그러나 data-> pid는 fan_event를 생성하는 프로세스를 나타내며, 이는 동일 할 수도 있지만 일반적으로 그렇지 않습니다. –
@MSalters는 둘 다 동일하지 않습니다. 'data-> pid'는 현재 프로세스의 pid가 아니라 파일 활동이있는 프로세스의 PID입니다. – craig65535