长话短说,我有两个来自同一个可执行文件的进程。它们旨在相互通信,并在这些流程前为用户创建聊天。称它们为p1,p2;
p1将更快地输入或初始细节(例如名称),因此必须等到p2执行相同操作。这是我将p1放入sigsuspend的地方,直到它收到p2准备好的信号为止。
现在,我的问题是sigsuspend中的p1可以在控制台中输入并且在stdin中正确,因此当p1和p2都已连接并且准备好聊天时,p2将接收在打字期间键入的不需要的文本p1 sigsuspend。
这是非常令人沮丧的,因为我过去一周疯狂地寻找解决方案,并没有发现任何帮助我。
当然,我发现了这些:
int c;
while( (c = getchar()) != '\n' );
以上只适用于一行,所以没有帮助。
然后,scanf:scanf("%*[^\n]\n");
对我来说真的不起作用。
这似乎是一个常见的问题,"冲洗" stdin,如果我可以称之为,但是没有解决方案吗?也许只是阻止在控制台中键入某种方式。我只需要摆脱以前的垃圾,并在用户开始聊天之前以空stdin开始。
请帮忙。
答案 0 :(得分:0)
确定。我找到了一个解决我问题的小问题。我会把这个放在这里以防有人遇到同样的问题。
在两个用户都已连接并准备好聊天后,我会这样做:
int c; while( (c=getchar()) != EOF );
并提示他们按ctrl + D(将EOF添加到stdin),如果他们想要开始聊天。这样我就可以删除所有不需要的文本,当其中一个按下ctrl + D时,它会停止循环,然后我向另一个进程发送一个信号,从而中断系统调用getchar()。
在那之后,一切都很干净,他们可以开始聊天。
希望这有助于某人。