出力を動的にリダイレクト - Linuxでは不可能なようです。なぜですか?

出力を動的にリダイレクト - Linuxでは不可能なようです。なぜですか?

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の場合、ユーザーがこれらのリンクを手動で変更できる実装がないのはなぜですか? (しようとするとエラーが発生します。)実装するのは難しいですか?ユーティリティプログラマはどのユーティリティを使用すべきかをどのように決定しますか?lsteecatln -sbash"No such file or directory"proc

ベストアンサー1

Linuxなどのシステムでは、ユーザーがbashでln -sを介してこれらのリンクを手動で変更できるのはなぜですか?

procファイルシステムは内部カーネル状態のみを表示するためです。場合によっては、特定のファイルにコンテンツを作成して実際にカーネルの状態に影響を与える可能性がありますが、コンテンツを移動できる例は考えられません。

実装するのは難しいですか?

カーネルはオープンソースなので、直接見て決定することができます(「難しさ」はプログラミングの経験によって異なります)。

また、変更中のプロセスが標準出力に書き込まれる場合に何が起こるのかを考えてください。考慮すべきセキュリティ関連事項もあります。

しかし、私の考えでは、上流のカーネルがそのような修正を受ける可能性はおそらく非常に低いでしょう。

ユーティリティプログラマは、procにどのユーティリティを使用すべきかをどのように決定しますか?

/proc仮想ファイルシステムなので、仮想ファイルシステムに必要なカーネル機能を実装します。すべての種類のカーネルプログラマは通常、カーネルを使用するときに/proc最小限の労働集約的な方法でプログラムしようとします。

おすすめ記事