使用fork时,parent中的scanf读取输入两次

时间:2017-05-27 20:27:46

标签: c fork scanf

当程序从fork ./a.out < inputFile这样的文件读取输入后,所有输入被打印两次输出,就像exit(0)的子项中没有fork一样。我的期望是一切都只打印一次,因为程序只在父母而不是孩子打印。为什么会这样?

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <wait.h>

int main() {
    char currentChar;
    int counter = 0;
    while (scanf("%c", &currentChar) != EOF) {
        printf("%c", currentChar);
        fflush(stdout);
        counter++;
        if (counter == 10) {
            // all characters after 10 characters are printed twice
            int pid = fork();
            if (pid == 0) {
                // child;
                exit(0);
            } else {
                // parent;
                int status;
                waitpid(pid, &status, 0);
            }
        }
    }
    return 0;
}

0 个答案:

没有答案