Я использую fork, и дочерний процесс считывает данные десять раз от пользователя, используя scanf внутри цикла for. Однако родительский процесс отправляет сигнал SIGSTOP ребенку после 4 секунд сна и считывает значение от пользователя и печатает его. Но если пользователь ввел данные, но не нажал enter для scanf в дочернем процессе, родительский процесс читает, но печатает данные, записанные в дочернем процессе. Как я могу остановить это от счастья.Как очистить содержимое scanf от остановленного процесса?
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);
}
Так выход, например, приходит так:
0: а
б
1: б
переменного тока (я не нажмите клавишу ВВОД здесь и дождаться SIGSTOP)
CHLD остановил
Tr (Введенные данные для родителей и нажать ввод)
ac2: тр
с
3: с ... и так далее
Таким образом, после ввод tr, почему мой родительский дисплей ac?
Хорошо, но все же вы можете сказать мне, как очистить буфер tty? –