1

私は 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番目のシグナル(再開など)を受信するとパイプに書き込まず、自己のみを再開することです。

月曜日にそのプログラムが必要なのを助けてください。残りのコードは機能し、その通信だけではありません。

4

1 に答える 1