【发布时间】:2021-11-06 19:32:58
【问题描述】:
我在使用 SIGUSR1 和 SIGUSR2 信号时遇到了问题。实际上我有一个客户端程序发送一个二进制字符串*str(例如:1100111代表g字母)到服务器程序,通过使用SIGUSR1信号'1'和SIGUSR2'2' .服务器像这样接收它们:
signal(SIGUSR1, my_handler);
signal(SIGUSR2, my_handler);
pause();
my_handler 对应的位置:
void my_handler(int signum) {
if (signum == SIGUSR1)
printf("1");
else
printf("0"); }
但问题是例如“g”字符的输出是01,所以看来接收不正确。我应该怎么做才能从我的服务器打印1100111?
提前非常感谢你:)
【问题讨论】:
-
欢迎来到 StackOverflow!请拨打tour 并阅读“How to Ask”以了解本网站的运作方式。然后回来edit您的问题,提供您的客户端和服务器的minimal reproducible examples。 -- 您是否知道处理程序在处理时被重置为默认值,至少在许多系统中? --
signal()已弃用,请参阅其文档以获取更多信息。 --printf()在信号处理程序中被调用是不安全的。 -
信号没有排队,因此如果您的程序在处理第一个 sigusr1 之前获得另一个 sigusr1,您将丢失数据...
-
@Shawn 那么还有其他选择吗?
-
@antiyro 在同一台计算机上的客户端和服务器之间进行通信? Unix套接字常用