- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
长话短说,我有来自同一个可执行文件的两个进程。它们旨在相互通信并为这些进程前面的用户创建聊天。称它们为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/
sigsuspend 更改信号掩码,暂停调用线程的执行,直到它接收到“其 Action 是执行信号捕获函数或终止进程的信号”,然后(如果进程没有终止并且信号处理程序返回)将信号掩码恢复到其原始状态。
根据 sigsuspend() 的手册页,它将用第一个参数替换当前信号掩码集。在APUE中,我看到了一个例子如下。代码可能有点太长了,但我不想错过任何东西。 int pr_mask(char *s)
长话短说,我有来自同一个可执行文件的两个进程。它们旨在相互通信并为这些进程前面的用户创建聊天。称它们为p1,p2; p1 会更快地输入初始详细信息(例如名称),因此它必须等到 p2 执行同样的操作。这
我试图同步父亲和 child ,下面的代码不起作用(显然 usr_interrupt++ 不是原子的)。信号量似乎也无济于事。 #include #include #include #inclu
对于家庭作业,我必须只使用 linux 系统调用来管理游戏中的信号,用 C 编程。我必须做的一件事是在 thread 中无限期调用 sigsuspend 并等待 SIGALRM,然后如果有 sigal
我的目标是使主进程与其“ fork ”子进程相互通信。通信是通过信号传递完成的。 当第一个 child 在等待 SIGUSR1 信号时卡住等待时,我的问题就出现了。 我真的不知道为什么它会卡在这一点上
假设有两个进程,一个父进程和一个子进程,它们使用信号进行同步。在父进程中,用于与子进程同步的函数如下所示。 WAIT_CHILD(){ while(sigflag == 0){ //sigflag
考虑以下 POSIX 系统的 C 代码: #include #include #include #include #define CONTINUE_SIGNAL SIGINT void con
我正在阅读有关 Linux x86-64 系统的信号/ECF 的教科书章节(CS:APP,第 3 版,第 8 章,第 781 页),并遇到了这个: The sigsuspend function te
我正在使用 golang 开发一个项目。该项目调用 LSF 的 C API(作业调度程序 https://en.wikipedia.org/wiki/Platform_LSF)。一些 API 在与 L
我正在寻找一个多线程应用程序,其中一个线程在继续之前等待另一个线程发出信号。根据here , sigsuspend 由于竞争条件不是 MT 安全的。根据here , sigwait 应该在这些情况下使
我是一名优秀的程序员,十分优秀!