加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 信号处理程序问题

发布时间:2020-12-16 09:33:43 所属栏目:百科 来源:网络整理
导读:我们一直在用C / Unix覆盖信号,教授在课堂上举了一个令我困惑的例子.在下面的主要方法中,使用包含的参数调用信号函数. main(){ signal(SIGALRM,handler); // install handler handler是一个定义为static void handler(int param){的函数 根据Ubuntu man 7信
我们一直在用C / Unix覆盖信号,教授在课堂上举了一个令我困惑的例子.在下面的主要方法中,使用包含的参数调用信号函数.

main()
{
  signal(SIGALRM,handler);   // install handler

handler是一个定义为static void handler(int param){的函数

根据Ubuntu man 7信号,SIGALRM是一个整数值14,而handler是一个程序员定义的函数.但是,在信号调用中没有显式定义整数参数,那么处理程序如何接收参数?

编辑

谢谢您的帮助.绊倒我的真正问题是该类没有覆盖typedef,所以我不知道它是如何被合并到函数中的,这就是缺少的部分.

解决方法

我不确定以前的评论是否回答了你的问题.我猜你在问这个参数是如何进入信号处理程序的.如果是这样:

每个信号处理程序必须具有相同的签名.它被硬编码到内核中,信号处理程序将采用单个int参数并且没有返回值.你不告诉内核 – 通过signal() – 如何调用处理程序,因为你没有选择.当内核决定调用你的信号处理程序时,它已经知道它想要发送什么信号.所以它查找处理程序的地址,然后调用该函数

(*pointer_to_handler) (signal_number);

正如保罗的回答所说的那样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读