1

関連する 2 つのプロセス間のパイプ通信がどのように機能するかを理解しようとしているので、この単純な C プログラムを作成しました。

#define  READ   0
#define  WRITE  1

char*  phrase = "This is a message!!!";
char*  phrase2 = "This is a second message!!!";

char buffer[100];

void sigpipe_h(int sig0){       //SIGPIPE handler
    printf("Ricevuto SIGPIPE\n");
    signal(SIGPIPE, sigpipe_h);
}

int main()
{
int fd[2], bytesRead, bytesRead2;
signal(SIGPIPE, sigpipe_h);

pipe(fd);

pid_t pid = fork();

if(pid == 0){   //child
    write(fd[WRITE], phrase, strlen(phrase)+1);     //write
    sleep(2);
    write(fd[WRITE], phrase2, strlen(phrase2)+1);//i'm writing for the second time

    sleep(2);
    close(fd[WRITE]);   //write side closed
}
else {          //parent
    bytesRead = read(fd[READ], buffer, 100); //receive message
    printf("The process %d has received %d bytes: %s \n", getpid(), bytesRead, buffer );
    close(fd[READ]);   //read side closed

    sleep(4);

}

return 0;


}

私がパイプを作成し、子がそれに何かを書き込み、親がメッセージを読み、読み取り側のパイプを閉じます。今までは完全に機能していましたが、パイプが読み取り側で閉じられた状態で 2 番目のメッセージを送信しようとすると、sigpipe_h 関数によって処理される SIGPIPE シグナルが発生するはずですよね? なぜそれが起こらないのですか?どこが間違っていますか?

助けてくれてありがとう。

4

0 に答える 0