【发布时间】:2017-09-02 20:30:33
【问题描述】:
我有这个小程序:
#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
但如果我将 cat 用于相同目的,它不会按预期工作:
akiiino$ cat in.txt
12345678
12345678
12345678
akiiino$ cat in.txt | ./out.out
260846532
0
0
这种奇怪行为背后的原因是什么,是否可以修复?我一直认为cating 文件与将它们输入stdin 没有什么不同。
【问题讨论】: