Web検索を試しましたが、Linuxリダイレクト出力を動的に検索して回答を見つけられませんでした。私が理解したのは、出力にstdoutがファイル記述子1を使用して動作することを示しています。
$ ls -l /proc/pid/fd/1
lrwx------ 1 user1 user1 64 Sep 27 13:37 1 -> /dev/pts/1
これには、ファイルに書き込んで読み取ることができるproc
ファイルシステムで動作するいくつかのUnixコマンドがあります。たとえば、Linuxの場合、ユーザーがこれらのリンクを手動で変更できる実装がないのはなぜですか? (しようとするとエラーが発生します。)実装するのは難しいですか?ユーティリティプログラマはどのユーティリティを使用すべきかをどのように決定しますか?ls
tee
cat
ln -s
bash
"No such file or directory"
proc
ベストアンサー1
Linuxなどのシステムでは、ユーザーがbashでln -sを介してこれらのリンクを手動で変更できるのはなぜですか?
proc
ファイルシステムは内部カーネル状態のみを表示するためです。場合によっては、特定のファイルにコンテンツを作成して実際にカーネルの状態に影響を与える可能性がありますが、コンテンツを移動できる例は考えられません。
実装するのは難しいですか?
カーネルはオープンソースなので、直接見て決定することができます(「難しさ」はプログラミングの経験によって異なります)。
また、変更中のプロセスが標準出力に書き込まれる場合に何が起こるのかを考えてください。考慮すべきセキュリティ関連事項もあります。
しかし、私の考えでは、上流のカーネルがそのような修正を受ける可能性はおそらく非常に低いでしょう。
ユーティリティプログラマは、procにどのユーティリティを使用すべきかをどのように決定しますか?
/proc
仮想ファイルシステムなので、仮想ファイルシステムに必要なカーネル機能を実装します。すべての種類のカーネルプログラマは通常、カーネルを使用するときに/proc
最小限の労働集約的な方法でプログラムしようとします。