パイプラインと有名なパイプライン
このシリーズの作家の中で、作者はLinuxプロセス間の通信のいくつかの主要な方法の概要を説明しています。その中でも、パイプラインと有名なパイプラインは、最も初期のプロセス間通信メカニズムの1つで、関連するプロセス間の通信に使用することができ、パイプラインには名前がないという制限を克服しています。無関係なプロセス間の通信。パイプラインと有名なパイプラインの間の通信メカニズムの詳細な議論に基づいて、本論文は、パイプラインと有名なパイプラインの間のコミュニケーションメカニズムの詳細な議論に基づいて、読書と書き込みルールを検証するために例を使用する。これは読者の読みと書きの規則に対する認識を高めるのに役立ち、また応用例を提供します。
1. Pipelineの概要と関連APIアプリケーション
1.1 Pipelineに関連する主な概念
Pipelineは、LinuxでサポートされているオリジナルのUnix IPCフォームの1つであり、以下の特徴を持っています。それは一方向にのみ流れることができます; 2つの当事者がコミュニケーションをとる必要があるときは、2つのパイプラインを確立する必要があります。
は父子プロセス間または兄弟プロセス間(親族関係のあるプロセス)間でのみ使用できます。ファイルシステム:パイプは、パイプの両端にあるプロセスのファイルですが、通常のファイルではなく、ファイルシステムに属しているのではなく、独立したファイルシステムを構成し、メモリ内にのみ存在する自己完結型ポータルです。
データの読み書き:プロセスによってパイプラインに書き込まれた内容は、パイプラインのもう一方の端にあるプロセスによって読み取られます。書き込まれた内容は毎回パイプバッファの最後に追加され、データは毎回バッファの先頭から読み取られます。
1.2パイプラインの作成:
#include int pipe(int fd [2])
この関数によって作成されたパイプの両端はプロセスの途中にあるため、実際のアプリケーションではあまり意味がありません。 pipe()によってパイプラインが作成された後、プロセスは一般に子プロセスを分岐し、それからパイプラインを介して親プロセスと子プロセス間の通信を実装します(したがって、2つのプロセスに関連性がある限り起動は難しくありません。一般的な先祖はパイプラインを使って通信することができます。
1.3パイプラインの読み書き規則:
パイプの両端はそれぞれ記述語fd [0]とfd [1]で記述できますが、パイプの両端は固定タスクです。すなわち、一方の端部は、パイプライン読み取り端部と呼ばれる記述語fd [0]で表される読み取り専用に使用でき、もう一方の端部は、パイプライン書き込み端部と呼ばれる記述語fd [1]で表される書き込み専用です。パイプライターからデータを読み込もうとしたり、パイプリーダーにデータを書き込もうとするとエラーになります。一般的なファイル入出力機能は、クローズ、読み取り、書き込みなどのパイプに使用できます。パイプラインからのデータの読み取り:
パイプラインの書き込み端が存在しない場合は、データの終わりが読み取られ、read関数によって返される読み取りバイトが0であると見なされます。
パイプラインの書き込み端が終了した場合存在する場合、要求されたバイト数がPIPE_BUFより大きい場合、パイプライン内の既存のデータバイト数が返され、要求されたバイト数がPIPE_BUF以下の場合、パイプライン内の既存のデータバイト数(この場合はパイプライン)が返されるデータ量が要求されたデータ量よりも少ないか、または返されたバイト数(この場合、パイプライン内のデータ量は要求されたデータ量より少なくない)。注:(PIPE_BUFはinclude /linux /limits.hで定義されており、カーネルのバージョンは異なる場合があります。Posix.1では、PIPE_BUFは512バイト以上で、赤い帽子は7.2から4096です。
パイプの読み込みルールの検証について:
/************* * readtest.c * ************** /#include #include
パイプラインへのデータの書き込み:
パイプラインにデータを書き込むとき、linuxは書き込みの原子性を保証しませんパイプラインバッファに空き領域がある場合、書き込みプロセスはパイプラインへの書き込みを試みます。データ読み取り処理がパイプラインバッファ内のデータを読み取らない場合、書き込み操作は常にブロックされます。
注:パイプラインの読み取り側が存在する場合にのみ、パイプラインにデータを書き込むことは意味があります。そうでなければ、パイプにデータを書き込むプロセスはカーネルからSIFPIPEシグナルを受け取ります。これはアプリケーションが処理しても無視しても構いません(デフォルトのアクションはアプリケーションの終了です)。
パイプラインの書き込み規則の検証1:書き込み側と読み取り側の依存関係