我有這個小程序:貓打破了計劃,手動標準輸入輸入不
#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