Warum funktioniert diese Pipe in C nicht?
Hier der Code, es wird leider nur im ersten Durchlauf der For-Schleife etwas geschrieben.
for (int m = 0; m < n; m++) {
int c = fork();
if (c == 0) {
int sum = func(some value);
char csum[10];
sprintf(csum, "%d", sum);
close(pdf[0]);
printf("OFF %i SUM %i CSUM %s PID %i PPID %i\n",off,sum,csum,getpid(),getppid());
write(pdf[1], csum, sizeof(csum));
close(pdf[1]);
exit(0);
} else {
close(pdf[1]);
char buf[10];
memset(buf,0,10);
wait(NULL);
read(pdf[0], buf, 10);
close(pdf[0]);
printf("%s\n", buf);
}
}
1 Antwort
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, Technik, programmieren
Der Teil, wo Du Dir die pipe (pdf) besorgst wäre grundlegend natürlich relevant. Aber seis drum.
Fehlerbehandlugn scheint nicht so ganz Deines zu sein, aber schaun wir mal:
for (int m = 0; m < n; m++) {
int c = fork();
if (c == 0) { /* child */
[...]
} else { /* parent */
close(pdf[1]); /* close write end */
char buf[10];
memset(buf,0,10);
wait(NULL);
read(pdf[0], buf, 10);
####
close(pdf[0]); /* close read end */
####
printf("%s\n", buf);
}
}
Auch unter der Annahme der Wiederverwendung der Pipe, wäre es vermutlich schon ganz gut, wenn deren Leseende noch offen wäre, nach dem nächsten fork().