【Linux】プロセス間通信


Linuxプロセス間通信方式は主にパイプ、信号、メッセージキュー、共有メモリ、信号量、ソケットがある.
一、パイプ
1、無名パイプの特徴:1)親縁関係を持つプロセス間の通信にしか使用できない2)半二重の通信モードであり、固定されたリードとライトがある3)パイプは特殊なファイルと見なすことができ、普通のread()、write()などの関数数を使用することができるが、それはいかなるファイルシステムにも属しず、メモリにしか存在しない
2、名前付きパイプ(FIFO)1)は、2つの互いに関連しないプロセスを通信させる2)このパイプはパス名で指摘することができ、ファイルシステムでは可視であり、通常のファイルのように読み書き操作を行うことができる3)FIFOは先進的な先出し規則を厳格に遵守し、パイプの読み方は常に先頭からデータを返し、それらの書き込みは常に末尾に追加され、lseek()ファイルの位置決めはサポートされていない
ネーミングパイプが正常に作成されたかどうかを判断するには、通常、乳の下の方法を使用します.
if((mkfifo(MYFIFO,0666)<0)&&(errno!=EEXIST))
{  

}

EEXISTは、ファイルが既に存在することを示す.
二、信号通信信号はソフトウェア階層で端末メカニズムのシミュレーションであり、病院の前のプロセスでプロセッサが割り込み要求を受信したときと同じ信号を受信した.信号は非同期で、1つのプロセスは信号がいつ来るか分からないので、信号は直接ユーザー空間とカーネルプロセスの間のインタラクションを行うことができ、カーネルプロセスはそれを利用してユーザー空間プロセスにどのようなシステムイベントが発生したかを通知することができます.プロセスは一般に3つの方法で信号に応答する:1)信号を無視するが,2つの信号を無視できない:SIGKILLおよびSIGSTOP 2)信号を捕捉し,信号が発生すると対応する処理関数3)SIGINT,SIGQUITなどの信号のデフォルト動作を実行する