J'ai ce petit programme:Comment faire pour que les enfants 'fork()' ed partagent stdin?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
int orig = 1;
for (int i = 0; (i != 3) && orig; ++i) {
orig = orig && fork();
}
if (orig) {
for (int i = 0; i != 3; ++i) {
wait(NULL);
}
} else {
int num;
scanf("%d", &num);
printf("%d\n", num*num);
}
}
qui est censé simplement trois numéros carrés qu'il lit à partir stdin
, mais il ne fonctionne pas comme prévu. , Il semble plus particulièrement comme l'un des enfants « porcs » tous l'entrée ted cat
, puisque le programme fait à peu près ceci:
2
2
2
à
4
0
0
Je pense que je dois utiliser dup
pour fixer Ceci, mais il n'y a presque rien dans nos supports de cours, et tout ce que je trouve sur le web est trop compliqué à comprendre pour moi. Comment puis-je faire en sorte que tous les processus se partagent stdin
?
'dup()' ne va pas aider. Il fallait synchroniser les enfants et lire des lignes entières de chaque ... beaucoup plus facile à lire stdin avant de bifurquer –
Cela ressemble à une très mauvaise idée, même si possible. Qui un processus connaîtrait l'entrée est destinée à ce processus? Utilisez un seul processus pour envoyer l'entrée à chacun des travailleurs au lieu! – Olaf
Umm .. tu veux dire comme «Comment puis-je faire deux trains partagent la même piste? – ThingyWotsit