リダイレクトは、オペレーティングシステムのカーネルではなく、シェルの概念ですか?
システムコールリダイレクトはどのように実装されますか?
リダイレクトの実装はパイプに似ていますか?
ベストアンサー1
リダイレクトの場合、stdin(<入力を介した入力)とstdout(>出力を介した出力)を置き換えるためにdup2()を使用するシェルでこれ(リダイレクト)が達成されるとします。
- 入出力用にファイルを開く in = open() out = open()
- dup2(in, 0) // 入力ファイルを標準入力に置き換える
- dup2(out, 1) // 出力ファイルを stdout に置き換えます。
- 近似)
- 閉じる(アウト)
- 実装する()
パイプの場合、 Pipe(2) システムコールは同様の方法で使用されます。つまり、読み出し終了と書き込み終了があります。パイプを介して接続された各コマンドは、パイプの一方の端から読み取られ、もう一方の端に書き込まれます。 stdin, stdout は、コマンドの対応するパイプの終わりを置き換えます。