포크를 사용하고 하위 프로세스가 for 루프 내부의 scanf를 사용하여 사용자로부터 데이터를 10 번 읽습니다. 그러나 부모 프로세스는 4 초간 휴면 후 SIGSTOP 신호를 자식에게 보내고 사용자로부터 값을 읽어서 인쇄합니다. 그러나 사용자가 데이터를 입력했지만 누르지 않은 경우 하위 프로세스에서 scanf에 대해 enter를 입력하면 상위 프로세스는 하위 프로세스에서 작성된 데이터를 읽지 만 인쇄합니다. 이 일이 일어나지 않게하려면 어떻게해야합니까? 중지 된 프로세스의 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 : A는
B
1 : B-에게
이교류 (내가 그나마 Enter 키를 누릅니다 여기 그리고 SIGSTOP 기다림)
,CHLD는
TR 정지 (상위에 입력 데이터를 입력 누름)
AC2 : TR
C
3 추 ..하고 따라서 이후 등
tr에 왜 부모님이 ac를 표시합니까?
좋아요.하지만 여전히 tty 버퍼를 지우는 방법을 알려주시겠습니까? –