2
我想要做的是给每个孩子发送一条消息,然后看看哪一个先打印出来。我用一个管试图让我的代码如下所示:家长如何用一个管道向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
呃,有趣的是,只有一个孩子的过程似乎消耗了“开始”部分。但当然你的答案是正确的。 –
所以我应该为n个孩子创建n个管道,然后向他们发送“开始”? –