当孩子在获得EOF后退出时父母会获得EOF吗?

问题描述 投票:1回答:1
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    int ch;
    pid_t p = fork();

    if (p == 0) {
        do {
            ch = getchar();
        } while (ch >= 0);
        return 0;
    }
    int s;
    waitpid(p, &s, 0);
    printf("A done\n");
    p = 0;
    do {
        ch = getchar();
    } while (ch >= 0 && (++p));
    printf("chars: %d\n", p);
    return 0;
}

这是一个最小的示例代码。理论上它应该读取一些字符直到EOF,并打印A done,并阅读更多的字符,并告诉你有多少字符后A done

但是,在我的Linux子系统Linux(Ubuntu 18.04)上,当我第一次按下Ctrl-D时,子进程和父进程都退出(接收EOF)。我得到的输出是这样的

asdfghjkl
^DA done
chars: 0

这是为什么?我该如何解决这个问题?

c linux fork eof
1个回答
0
投票

fork(2)中,文件描述符是dup(2)ed,因此它们共享相同的文件指针,并且其中一个进程读取的内容不会被另一个读取,因此。

© www.soinside.com 2019 - 2024. All rights reserved.