この質問はあまりにも抽象的ではなく、スタック全体に多くのソフトウェアが関連していることを願っています。
私たちは皆/dev/stdin、/dev/stdout、/dev/stderrを知っています。新しい標準ストリーム/dev/stdjsonを作成するにはどうすればよいですか?これをサポートするにはどのソフトウェアが必要ですか?私はそうではないと仮定します。必要必要に応じてストリームを開くために、ファイル記述子/dev/stdjsonを各プログラムに渡します。それでは、新しい標準ストリームをどこに追加できますか?シェルの一部であるカーネルモジュールでなければなりませんか?
答え1
標準ストリームに関することは、プロセスの開始時に利用可能であると仮定されることである。つまり、ファイル記述子を意味しますはい各プログラムに渡されます。 (でも許されるシステムがこれらのファイル記述子で指定されていない一部のファイルを開くようにします。それ以外の場合は後で閉じたままになりますexecve()
。 )これらのストリームを標準化するもう1つの点は、CランタイムライブラリがFILE
標準の入力、出力、およびエラーに対応するオブジェクトを作成し、ユーザープログラムが他のfprintf()
機能をすぐに使用できることです。stdio.h
「デバイス」/dev/stdin
などはこれには関係なく、むしろ以下を介してこれらのファイル記述子(または基本ファイル)にアクセスするシステム固有の方法です。名前。 Linuxでは、これは現在のプロセスのファイル記述子0への魔法のカーネルインタフェースであるそれ自体を/dev/stdin
指すシンボリックリンクです。/proc/self/fd/0
それがなければ、fd open/dev/stdin
自体は何もしません。
したがって、新しい「標準ストリーム」を追加するには、Cライブラリを変更する必要があり、プログラムの起動時にfds 0、1、2を特別に処理するいくつかのプログラムも変更する必要があります。
ただし、要求時にファイルを開くプロセスについて話している場合、これは標準ストリームとは少し異なって聞こえます。もちろん、プログラムが存在すると仮定できる場所に名前付きファイルを作成できます。ただし、ファイルが使用される用途と、通常のファイルなのか、パイプなのか、ソケットなのかは、実際に実行したい操作によって異なります。また、特定のプログラムまたはプログラムグループに/var/lib/mytool
関連するものであれば/dev/
。