Я запускаю следующую программу C на Linux.
программа
// program.c
#include <stdio.h>
#include <unistd.h>
int main() {
if (fork() == 0) { // child process
int a, b;
scanf("%d %d", &a, &b);
printf("%d + %d = %d\n", a, b, a + b);
}
return 0;
}
Ожидаемое поведение
$ ./program
1 2
1 + 2 = 3
Фактическое поведение
$ ./program
$ 1222245440 + 32764 = 1222278204
Когда я запускаю программу в терминале, программа вскоре выдаст странный вывод, такой как 1222245440 + 32764 = 1222278204
и не ждет, когда я наберу текст . Я думаю, что проблема в том, что стандартные потоки ввода и вывода дочернего процесса не привязаны к терминалу. Вместо этого потоки родительского процесса присоединяются. В результате дочерний процесс не может получить мой ввод с клавиатуры. Есть ли способ решить эту проблему? Я имею в виду, чтобы отделить потоки родительского процесса и присоединить потоки дочернего процесса. По какой-то причине я должен получать входные данные в дочернем процессе.