fork()
プロセスの場合、子プロセスはファイル記述子を継承します。問題はなぜですか?
私がビューにファイル記述子を共有することは、各プロセスがr / wポインタの位置を追跡しようとしたときに面倒です。
このデザイン決定がなされたのはなぜですか?
ベストアンサー1
シェルの断片を考えてみましょう。
{ somecmd; othercommand *.txt; } > outputfile
リダイレクトが開始されると、シェルはoutputfile
一度開き、ファイルハンドルをに渡して処理somecmd
します。グループ化を考慮すると、ユーザーは両方のコマンドの出力が終了することを期待します。これはおそらく画面に表示されるのと同じように正しいでしょう。 (グループがシェルスクリプトの場合でも、状況は同じです。)othercmd
fork
outputfile
{ }
ファイルの場所がすべてのプロセスに対して独立している場合、出力はothercommand
破損しますsomecmd
。ファイルハンドルの位置がリセットされると、シェルはエンドを指すハンドルを渡すことfork
ができません(ファイルハンドルがファイルハンドルの後ろにあるため)。パイプを使用して2つのコマンドの出力を収集し(とにかく位置に依存しない)、他のプログラムから2つのコマンドの出力を接続する必要があります。othercommand
outputfile
somecmd
{ somecmd; othercommand *.txt } | cat > outputfile