【发布时间】:2014-09-15 12:05:00
【问题描述】:
我正在使用 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: b
ac(这里我不按回车键等待 SIGSTOP)
chld 停止
tr(为父级输入数据并按下回车键)
ac2: tr
c
3: c ...等等
那么输入tr后为什么我的父母显示ac?
【问题讨论】:
标签: c fork flush memset fflush