Я использую fork, и дочерний процесс десять раз считывает данные от пользователя, используя scanf внутри цикла for. Однако родительский процесс отправляет сигнал SIGSTOP дочернему после 4 секунд сна, считывает значение от пользователя и печатает его. Но если пользователь ввел данные, но не нажал клавишу ввода для сканирования в дочернем процессе, родительский процесс читает, но печатает данные, записанные в дочернем процессе. Как мне предотвратить это.
ch=fork();
if(ch==0)
{
for(i=0;i<10;i++)
{
fflush(stdin);
scanf("%s",buf);
printf("%d: %s\n",i,buf);
}
}
else
{
char buf2[100],cha;
sleep(4);
kill(ch,SIGSTOP);
write(STDOUT_FILENO,"\nchld stopped\n",14);
memset(stdin,0,sizeof(stdin));
read(STDIN_FILENO,buf2,2);
write(STDOUT_FILENO,buf2,2);
kill(ch,SIGCONT);
wait(SIGCHLD);
}
Таким образом, вывод, например, выглядит следующим образом:
a
0: a
b
1: b
ac (здесь я не нажимаю ввод и жду SIGSTOP)
ребенок остановился
tr (ввел данные для родителя и нажал Enter)
ac2: tr
c
3: с... и так далее
Итак, после ввода tr, почему мой родитель отображает ac?