Was ich getan habe, ist, ich schuf n Kinder und als der Elternteil die Nachricht "Start" zu ihnen mit n Rohren. Eine Pipe für jedes Kind. Nun, was ich zu tun habe, ist es, dem Elternteil die Nummer jedes Kindes zurückzugeben.N Kinder Nachricht an Eltern senden
Dies ist mein Code bis jetzt:
int main()
{
int n=5;
int p[n-1][2];
int i;
for(i=0;i<n;i++){
if(pipe(p[i])>0){
perror("pipe error");
exit(1);
}
}
for(i=0;i<n;i++){
pid_t pid=fork();
if(pid<0){
perror("fork error");
exit(1);
}
if(pid==0){
int j;
for(j=0;j<n;j++){
close(p[j][1]);
}
for(j=0;j<i;j++){
close(p[j][0]);
}
char msg[256];
int h;
read(p[i][0],&h,sizeof(int));
read(p[i][0],msg,h*sizeof(char));
cout<<i<<"_"<<msg<<endl;
close(p[i][0]);//here I would like to send the number i to the parent
for(j=i+1;j<n;j++){
close(p[j][0]);
}
exit(0);
}
}
char ms[256];
strcpy(ms,"start");
int ho=strlen(ms);
for(i=0;i<n;i++){
if(write(p[i][1],&ho,sizeof(int))==-1){
perror("write error");
exit(1);
}
if(write(p[i][1],ms,ho*sizeof(ms))==-1){
perror("write error");
exit(1);
}
close(p[i][1]);
}
for(int j=0;j<n;j++)
close(p[j][0]);//then read the number of each child and print it
while(wait(NULL)>0){};
exit(0);
}
Und dies ist die Ausgabe:
0_start
2_start
1_start
4_start
3_start
So erfolgreich ich die Meldung Start kann ich zu jedem child.But geschickt Finde nicht heraus, wie die Eltern die von den Kindern geschickten Nummern erhalten werden.
Das Array p hat die Größe n. Also sollten Sie in 'p [0]' bis 'p [n-1]' schreiben. Sie schreiben in 'p [1]' bis 'p [n]'. –
Ändern Sie Ihre for-Schleifen zu 'für (int j = 0; j
okay, ich werde das bearbeiten –