gpt4 book ai didi

c - 向信号处理程序提供/传递参数

转载 作者:太空狗 更新时间:2023-10-29 16:17:45 29 4
gpt4 key购买 nike

我可以向信号处理程序提供/传递任何参数吗?

/* Signal handling */
struct sigaction act;
act.sa_handler = signal_handler;
/* some more settings */

现在,处理程序看起来像这样:

void signal_handler(int signo) {
/* some code */
}

如果我想做一些特殊的事情,即删除临时文件,我可以将这些文件作为参数提供给这个处理程序吗?

编辑 0:感谢您的回答。我们通常避免/不鼓励使用全局变量。在这种情况下,如果您有一个庞大的程序,可能会在不同的地方出错,您可能需要做大量的清理工作。为什么要这样设计 API?

最佳答案

您不能将自己的数据作为参数传递给信号处理程序。相反,您必须将参数存储在全局变量中。 (如果您在安装信号处理程序后需要更改这些数据,请务必非常小心)。

对编辑 0 的响应: 历史原因。信号是一种非常古老且非常底层的设计。基本上,您只是为内核提供了一些机器代码的单个地址,并要求它在发生此类情况时转到该特定地址。我们回到了“可移植汇编程序”的思维模式,内核提供了一个简洁的基线服务,无论用户进程可以合理地期望自己做什么,它都必须自己做。

此外,通常反对全局变量的论点在这里并不适用。信号处理程序本身 是一个全局设置,因此不存在为它设置几组不同的用户指定参数的相关可能性。 (好吧,实际上它不完全是全局的,而只是线程全局的。但是线程 API 将包含一些线程本地存储机制,这正是您在这种情况下所需要的)。

关于c - 向信号处理程序提供/传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6970224/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com