Ich bin auf der Suche nach Informationen zwischen einem Elternteil und einem Kind. Zur Zeit werde ich vom STDERR des Elternteils zum STDIN des Kindes leiten und den STDOUT des Kindes lesen, indem ich das andere Ende des Dateideskriptors lese. Ich habe das folgende unten getan, aber kämpfe mit dem Kind, das aussteigen muss, bevor ich lesen kann. Wie kann ich das Kind AusgangLesen und Schreiben von Kind-Prozessen während des Lebens und der laufenden
Loops zwischen Kind durch die Linie ständig Leseleitung verarbeitet
for (int currentP = 0; currentP < inputs.playerCount; currentP++) {
char currentPlayerC[2];
sprintf(currentPlayerC, "%d", currentP);
char* currentPlayerT = argv[3+currentP];
int fds[2];
int fds1[2];
pipe(fds);
pipe(fds1);
char buff[10];
memset(buff, 0, sizeof(buff));
if ((pids[currentP] = fork()) < 0) {
perror("fork");
abort();
} else if (pids[currentP] == 0) { //Child
close(fds[PIPE_READ]);
close(fds1[PIPE_WRITE]);
dup2(fds[PIPE_WRITE], STDOUT_FILENO);
dup2(fds1[PIPE_READ], STDIN_FILENO);
close(fds1[PIPE_READ]);
close(fds[PIPE_WRITE]);
execlp(CHILD PROCESS THAT PRINTS TO STDOUT READS FROM STDIN))
_exit(0);
return BADSTART;
} else { //parent
dup2(fds1[PIPE_WRITE], STDERR_FILENO);
close(fds[PIPE_WRITE]);
close(fds1[PIPE_READ]);
fprintf(stderr, "game_over\n"); //ENDS CHILD
read(fds[PIPE_READ], buff, sizeof(buff));
//Will continue forever unless I put in game_over
close(fds1[PIPE_WRITE]);
close(fds[PIPE_READ]);
}
}
Sie Ausgabe von dem Kind erhalten, sobald das Kind die Ausgabe schreibt. Vielleicht müssen Sie die Pufferungsstrategie im Kind anpassen, z. indem Sie die Pufferung für 'stdout' ausschalten oder an geeigneten Stellen' fflush() 'aufrufen. – fuz
Die OP-Frage handelt von einem Laufzeitproblem, aber der veröffentlichte Code ist nur ein Fragment. Bitte posten Sie ein [mcve] – user3629249
bezüglich: '_exit (0); return BADSTART; 'Die Anweisung 'return' wird NIEMALS ausgeführt – user3629249