我有这个小程序:我如何使'fork()'ed儿童分享标准输入?
#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);
}
}
这应该简单地广场三个数字,它从stdin
读取,但预期它不工作。具体来说,它看起来像小孩“猪”的所有cat
特德输入之一,因为该程序的功能大致是这样的:
2
2
2
到
4
0
0
我想我需要使用dup
修复这个,但是在我们的课程资料中几乎没有任何内容,而且我在网上找到的所有内容都太复杂了,以至于我无法理解。我怎样才能使所有的流程分享stdin
?
'dup()'不会帮助。你必须同步孩子,并阅读整个行...每一个更容易阅读stdin –
这听起来像一个非常糟糕的主意,即使可能。谁会意识到输入是针对这个过程的?使用单个进程将输入发送给每个工作人员! – Olaf
嗯..你的意思是'我怎样才能让两列火车共享相同的轨道'? – ThingyWotsit