関連する 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 シグナルが発生するはずですよね? なぜそれが起こらないのですか?どこが間違っていますか?
助けてくれてありがとう。