2012-02-21 11 views
1

私はシステムクラスの配管とシェルについて学んでいます。私はstraceとおしまいです。私はdpipeというプログラムで実行しています。 straceログでPipe()システムコール

、私は以下を参照してください。

pipe([3, 4]) 
pipe([5, 6]) 

それらの整数は何を表していますか?私はその配管の下で基本的に1つのコマンドの出力を|を使って別のコマンドの出力にルーティングするシェルで使用します。それは単に私たちの生活を楽にします。この場合、そこにある数字の配列は何を表していますか?さらに、pipingがシェルで使われただけの場合は、Cシステムコールがそこにあるのはなぜですか?それは、自分たちのシェルを書いて(彼らの人生を楽にするために)書こうとする人だけのために作られたものですか?

答えて

1

Ignacioは、角括弧内の数字がpipe()システムコールによって返された2つのファイル記述子であることを正しく説明しました。最初はパイプの読み込み側、2番目はパイプの書き込みです。

パイプは、シェルで使用されることは決してありませんが、おそらくそれを使用する最も一般的な場所です。しかし、あなたはそれを後方に持っています。シェルはシステムによって提供されるシステムコールのみを使用でき、システムはpipe()を提供するので、シェルは配管を提供することができます。システムコールの形式でo/sをサポートしなければ、シェルはパイプ表記法を提供することはまずありません。すべてのシステムコールは、プログラマーが顧客(彼らが書いたソフトウェアのエンドユーザー)にサービスを提供することを可能にするためのものです。

+0

パイプのシステムコールやマルチタスクをサポートしなくても、パイプのようなセマンティクスを実装できます。 DOS command.comは、1つのコマンドの出力を最初にファイルにリダイレクトしてから、2番目のコマンドを開始します。 (もちろん、それには意味や制限があります。) –

3

これは、pipe(2,3p)によって返されるファイル記述子です。詳細については、pipe(2)のマニュアルページを参照してください。

1

これらはファイル記述子です。また、配管はシェルで使用されるだけではありません。配管はどのプログラムでも行うことができ、プロセスがUnixで情報を交換する主な方法です。シェルにとって特別なものではありません。シェルは、ユーザーが他のプロセスを簡単に開始できるようにする通常のプロセスです。