我们一直在讨论 C/Unix 中的信号,教授在课堂上举了一个让我困惑的例子。在下面的 main 方法中,使用包含的参数调用信号函数。
main()
{
signal(SIGALRM, handler); // install handler
handler 是一个定义为的函数static void handler(int param){
根据Ubuntuman 7 signal
,SIGALRM是一个整数值14,handler是程序员定义的函数。但是,信号调用中没有显式定义整数参数,那么处理程序如何接收参数呢?
EDIT
谢谢您的帮助。真正让我困惑的问题是该类没有涵盖 typedef,所以我不知道它是如何合并到函数中的,而这正是缺少的部分。
我不确定之前的评论是否回答了您的问题。我猜你在问how参数到达信号处理程序。如果是这样:
每个信号处理程序must具有相同的签名。信号处理程序将采用单个 int 参数并且没有返回值,这是硬编码到内核中的。你不告诉内核——通过signal()
-- 如何调用处理程序,因为在这件事上你别无选择。当内核决定调用信号处理程序时,它已经知道要发送什么信号。所以它查找处理程序的地址,然后调用该函数,如下所示
(*pointer_to_handler) (signal_number);
正如保罗的回答所说。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)