パスへのリンクではなく、インデックスノードへのリンクのように見えます。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/tcp
TCP ソケットの inode 番号など) が表示されます。
プロセスがファイルを開こうとするとどうなりますか? inodeの新しいオープンファイル記述が生成されますか?
これが私の印象です。 unix.SEでこれに関する記事を見たようですが、「公式」のドキュメントは見たことがありません。動作は確かにスタンドアロン文書で説明されています。しばらく前に、Stackoverflowに対するこの回答でこれをテストするためのプログラムを作成しました。ファイル記述子をコピーして独立して検索