2

私はパイプラインについて読んでいて、このトピックも読んでいます- パイプを使用して2つのプログラム間で単純な文字列を送信する方法?

@jschmier の回答 (最初の回答) を読みましたが、実際にはどのように機能するのでしょうか? プログラム writer.c と reader.c は同時に実行する必要がありますか? その場合、writer.c が文字列を送信したことを、reader.c にどのように「通知」しますか?

これらの質問はほとんど理論的なものですが、パイプラインがどのように機能するかを知りたいと思っています。ありがとうございます。

4

1 に答える 1

1
Do the programs writer.c and reader.c have to run simultaneously ?

彼らはそうします。

If they does , how reader.c is "informed" that writer.c has sent a string?

pipeどちらのプログラムも特別なデバイスを開きます: "/tmp/myfifo. 1 つは読み取り用に開き、もう 1 つは書き込み用に開きます。カーネルは、それらの間のデータ転送を処理します。

内部バッファは非常に小さく、1 つのアクティビティがないと別のアクティビティがブロックされるため、パイプは実際には同時読み取りと書き込みを必要とすることに注意してください。

仕組み: 単純化すると、パイプに書き込まれたデータは、プロセス空間からカーネル、そしてリーダープロセスに送られます。1 つのプロセスがビジーな場合にプログラムの実行をブロックすることは受け入れられないため、通常、開発者はノンブロッキング コールを使用しようとします。

パイプの詳細については、このテーマに関する Linux ドキュメントを参照してください: http://linux.die.net/man/7/pipe

于 2013-04-17T18:22:11.177 に答える