`/proc/pid/fd` 아래의 심볼릭 링크를 어떻게 이해해야 합니까?

`/proc/pid/fd` 아래의 심볼릭 링크를 어떻게 이해해야 합니까?

경로에 대한 링크라기보다는 인덱스 노드에 대한 링크처럼 보입니다. readlink()호출 프로세스의 루트에 있는 inode에 대한 정식 경로는 그들에게 무엇을 의미합니까? 프로세스가 파일을 열려고 하면 어떻게 됩니까? inode에 대한 새로운 열린 파일 설명이 생성됩니까?

답변1

호출 프로세스의 루트에 있는 inode에 대한 표준 경로인 readlink()는 그들에게 무엇을 의미합니까?

일반 파일의 경우 링크 텍스트는 파일이 열린 경로를 기준으로 나타납니다. 예를 들면 다음과 같습니다.

$ echo foo > abba
$ ln abba acdc
$ cat >> abba & 
[1] 12312
$ ls -l /proc/12312/fd/1
l-wx------ 1 foo users 64 Feb 19 15:19 /proc/12312/fd/1 -> /tmp/abba

이 이름을 바꾸면 표시되는 경로가 변경됩니다.

$ mv abba qwerty
$ ls -l /proc/12312/fd/1
l-wx------ 1 foo users 64 Feb 19 15:19 /proc/12312/fd/1 -> /tmp/qwerty

제거하는 것과 동일합니다.

$ rm qwerty
$ ls -l /proc/12312/fd/1
l-wx------ 1 foo users 64 Feb 19 15:19 /proc/12312/fd/1 -> /tmp/qwerty (deleted)

링크를 통해 파일을 열면 여전히 찾을 수 있지만인덱스 노드문제가 있습니다:

$ echo testtest > /proc/12312/fd/1
$ cat acdc
testtest

비정규 파일의 경우, 어딘가에서 볼 수 있는 inode 유형(예: 파이프 또는 소켓)과 inode 번호 /proc(예: /proc/net/tcpTCP 소켓의 inode 번호)를 표시합니다.

프로세스가 파일을 열려고 하면 어떻게 됩니까? inode에 대한 새로운 열린 파일 설명이 생성됩니까?

이것이 나의 인상입니다. unix.SE에서 이에 대한 게시물을 본 것 같지만 "공식" 문서는 본 적이 없습니다. 동작은 확실히 독립형 문서에 설명되어 있습니다. 얼마 전에 Stackoverflow에 대한 이 답변에서 이를 테스트하기 위한 프로그램을 작성했습니다.파일 설명자를 복사하고 독립적으로 검색

관련 정보