gpt4 book ai didi

控制台允许在 sigsuspend 中输入 stdin

转载 作者:行者123 更新时间:2023-11-30 17:22:29 26 4
gpt4 key购买 nike

长话短说,我有来自同一个可执行文件的两个进程。它们旨在相互通信并为这些进程前面的用户创建聊天。称它们为p1,p2;

p1 会更快地输入初始详细信息(例如名称),因此它必须等到 p2 执行同样的操作。这是我将 p1 放入 sigsuspend 的地方,直到它收到 p2 也准备就绪的信号。

现在,我的问题是 sigsuspend 中的 p1 可以在控制台中输入,并且可以在 stdin 中输入,因此当 p1 和 p2 都连接并准备好聊天时,p2 将收到 p1 期间输入的不需要的文本信号暂停。

这非常令人沮丧,因为过去一周我一直在疯狂地寻找解决方案,但没有发现任何对我有帮助的结果。

当然,我找到了这些:

int c;
while( (c = getchar()) != '\n' );

以上仅适用于一行,因此没有帮助。

然后, scanf: scanf("%*[^\n]\n"); 对我来说并不起作用。

这似乎是一个常见问题,“刷新”stdin(如果我可以这样调用它),但是没有解决方案吗?也许只是以某种方式阻止在控制台中输入。我只需要在用户开始聊天之前清除以前的垃圾并使用空的标准输入重新开始。

请帮忙。

最佳答案

好的。我找到了一个解决我的问题的小技巧。我将把它放在这里,以防有人遇到同样的问题。

两个用户都连接并准备好聊天后,我会:

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

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

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

希望这对某人有帮助。

关于控制台允许在 sigsuspend 中输入 stdin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28016345/

26 4 0
文章推荐: javascript - 将JS中下拉列表的值解析为php
文章推荐: C#- 将形状移动到距窗体顶部一半的位置
文章推荐: javascript - 在 HTML
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com