控制台允许在sigsuspend中输入stdin

时间:2015-01-19 00:17:14

标签: c

长话短说,我有两个来自同一个可执行文件的进程。它们旨在相互通信,并在这些流程前为用户创建聊天。称它们为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开始。

请帮忙。

1 个答案:

答案 0 :(得分:0)

确定。我找到了一个解决我问题的小问题。我会把这个放在这里以防有人遇到同样的问题。

在两个用户都已连接并准备好聊天后,我会这样做:

int c; while( (c=getchar()) != EOF );

并提示他们按ctrl + D(将EOF添加到stdin),如果他们想要开始聊天。这样我就可以删除所有不需要的文本,当其中一个按下ctrl + D时,它会停止循环,然后我向另一个进程发送一个信号,从而中断系统调用getchar()。

在那之后,一切都很干净,他们可以开始聊天。

希望这有助于某人。