`/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に対するこの回答でこれをテストするためのプログラムを作成しました。ファイル記述子をコピーして独立して検索

関連情報