我正在使用 fork,子进程使用 for 循环内的 scanf 从用户读取数据十次。然而,父进程在睡眠 4 秒后向子进程发送 SIGSTOP 信号,并从用户那里读取一个值并打印它。但是,如果用户在子进程中输入了数据但没有为 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:一个
b
1:乙
ac(我在这里没有按 Enter 并等待 SIGSTOP)
孩子停止
tr(为父项输入数据并按下回车键)
ac2:tr
C
3:c ...等等
那么输入tr后为什么我的父母显示ac?