Linuxの/proc
ファイルシステムをいじくり回していて、現在のプロセスのプロセスディレクトリへのシンボリックリンクである/proc/self
に遭遇しました。実装方法を教えてください。 1つの解決策は、シンボリックリンクをすべてのコンテキストスイッチで変更することですが、ディスクアクセスを伴うため、明らかに非常にコストがかかります。
http://lxr.linux.no/linux+v3.2.9/fs/proc/base.c#L2482 は現在の実装です。
proc
ファイルシステムは完全に仮想であり、内部VFS readlink
が特別なシンボリックリンクの適切な場所に委任するように実装されています。そのため、すべてのコンテキストスイッチではなく、読み取り/トラバース時にself
が指す内容を計算します。
/proc
のファイルはディスクに保存されず、カーネルによってその場で生成されます。 を参照してください/ procを開いて読み取るとどうなりますか?
プログラムに傾倒している場合は、/proc
の実装を カーネルソースコード で読むことができます。 /proc/self
シンボリックリンクの内容は、呼び出しのpidでバッファを埋める function によって生成されます処理する。