我有这个小程序:猫打破了计划,手动标准输入输入不
#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("%8d", &num);
printf("%d\n", num*num);
}
}
这应该简单地广场三个数字,它从stdin
读取。如果我在自己键入数字,它的工作原理:
akiiino$ ./out.out
12345678
12345678
12345678
260846532
260846532
260846532
,但如果我用猫为了同样的目的,预期它不工作:
akiiino$ cat in.txt
12345678
12345678
12345678
akiiino$ cat in.txt | ./out.out
260846532
0
0
这背后有什么奇怪的原因行为,它是可以修复的吗?我一直假设cat
ing文件与输入到stdin
没有什么不同。
其实不,它仍然不能正常工作。 – Akiiino
奇怪的是,它对我来说很好(与猫+管道奇怪的配合,罚款与<)。那么,你可能想要让父进程读取数据,并让孩子进行微积分,无论如何你都要“分叉”。你也应该改变输出的数据类型,'int'对于8位数字输入肯定不够好。 – RobinG