私がしようとしているのは、各子供にメッセージを送り、どの子が最初にそれを印刷するかを見ることです。親はどのようにして1つのパイプでn人の子供にメッセージを送信できますか?
int main()
{
int pfd[2];
if(pipe(pfd)<0){
perror("pfd error");
exit(1);
}
int n=5;
for(int i=1;i<=n;i++){
pid_t pid=fork();
if(pid<0){
perror("fork error\n");
exit(1);
}
if(pid==0){
close(pfd[1]);
char ms[256];
int h;
read(pfd[0],&h,sizeof(int));
read(pfd[0],ms,h*sizeof(char));
cout<<i<<"_"<<ms<<endl;
close(pfd[0]);
exit(0);
}
if(pid>0){
close(pfd[0]);
}
}
int j=1;
char uzenet[256];
strcpy(uzenet,"start");
int ho=strlen(uzenet);
while(j<=n){
if(write(pfd[1],&ho,sizeof(int))==-1){
perror("write error");
exit(1);
}
if(write(pfd[1],uzenet,ho*sizeof(char))==-1){
perror("write error");
exit(1);
}
j++;
}
close(pfd[1]);
while(wait(NULL)>0){};
exit(0);
}
そして、それはこのプリントアウト:
2_
1_start
4_
3_
5_
をしかし、私がしたいことはこれです:
2_start
1_start
4_start
3_start
5_start
興味深いことに、興味深いことに1つの子プロセスが ''開始 ''部分を消費するようです。もちろん、あなたの答えは正しいです。 –
だから私はn人の子供のためのnパイプを作成し、それらのすべてに "スタート"を送信する必要がありますか? –