#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
.
Однако в моей подсистеме Windows для Linux (Ubuntu 18.04), когда я нажимаю Ctrl-D в первый раз, и дочерний и родительский процессы завершают работу (получает EOF).Я получаю что-то вроде
asdfghjkl
^DA done
chars: 0
Почему это так?И как мне это исправить?