リダイレクトはどのように実装されますか?

リダイレクトはどのように実装されますか?

リダイレクトは、オペレーティングシステムのカーネルではなく、シェルの概念ですか?

システムコールリダイレクトはどのように実装されますか?

リダイレクトの実装はパイプに似ていますか?

ベストアンサー1

リダイレクトの場合、stdin(<入力を介した入力)とstdout(>出力を介した出力)を置き換えるためにdup2()を使用するシェルでこれ(リダイレクト)が達成されるとします。

  1. 入出力用にファイルを開く in = open() out = open()
  2. dup2(in, 0) // 入力ファイルを標準入力に置き換える
  3. dup2(out, 1) // 出力ファイルを stdout に置き換えます。
  4. 近似)
  5. 閉じる(アウト)
  6. 実装する()

パイプの場合、 Pipe(2) システムコールは同様の方法で使用されます。つまり、読み出し終了と書き込み終了があります。パイプを介して接続された各コマンドは、パイプの一方の端から読み取られ、もう一方の端に書き込まれます。 stdin, stdout は、コマンドの対応するパイプの終わりを置き換えます。

おすすめ記事