私は C で書くプログラムを持っています。常に動作する 3 つのプロセスを作成する必要があります。これらの 3 つのプロセスは信号 (停止、一時停止、再開) を受信し、それらの信号の 1 つを受信すると、残りのプロセスに他の信号を送信し、受信した信号をパイプ (パイプである必要があります) に書き込みます。他の人はその信号を受け取り、パイプを読み取り、パイプで言われたことを行います。シグナルハンドラーにパイプを書き込むには、次のようなものがあります。
void rcvkillsig(int sig){
if(sig==SIGINT){
int op;
op = 1;
close(pfd1[0]);
close(pfd3[0]);
write(pfd1[1], &op, 8);
write(pfd3[1], &op, 8);
close(pfd1[1]);
close(pfd3[1]);
kill(sndpid, SIGCONT);
kill(rcvpid, SIGCONT);
printf("End chk\n");
kill(chkpid, SIGKILL);
}
}
そして、パイプを読むためのそのようなもの:
void rcvinfsig(int sig){
if(sig==SIGCONT){
cflag=0;
int op;
close(pfd2[1]);
read(pfd2[0], &op, 8);
close(pfd2[0]);
if(op==1){
kill(chkpid, SIGKILL);
printf("End chk\n");
}
else if(op==2){
printf("Pause chk!\n");
cpaused=1;
}
else if(op==3){
printf("Resume chk!\n");
cpaused=0;
}
}
}
もちろん、すべてのプロセスと受信信号にはそのようなコードがあります。
このプログラムでは、各プロセスに pfd1[2]、pfd2[2]、pfd3[2] を使用し、main 関数では、pipe(...) によってそれらのパイプを作成します。
私の問題は、プロセスが最初のシグナル(一時停止など)を受信するとパイプに書き込みますが、2番目のシグナル(再開など)を受信するとパイプに書き込まず、自己のみを再開することです。
月曜日にそのプログラムが必要なのを助けてください。残りのコードは機能し、その通信だけではありません。