Я запускаю следующую программу 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 и не ждет, когда я наберу текст . Я думаю, что проблема в том, что стандартные потоки ввода и вывода дочернего процесса не привязаны к терминалу. Вместо этого потоки родительского процесса присоединяются. В результате дочерний процесс не может получить мой ввод с клавиатуры. Есть ли способ решить эту проблему? Я имею в виду, чтобы отделить потоки родительского процесса и присоединить потоки дочернего процесса. По какой-то причине я должен получать входные данные в дочернем процессе.

0