(十一)信号事件的管理

本文深入探讨信号事件的管理,包括信号事件的注册和激活过程。在注册部分,详细解析了如何将信号事件添加到事件链表中,并解释了两个不同注册操作的区别。激活信号事件的部分阐述了信号如何触发读socket事件,进而激活相应的信号处理。文章以一个小结收尾,为后续的定时事件管理铺垫。
摘要由CSDN通过智能技术生成

前言

在上一小节中我们主要讲解了信号事件是如何合并到多路I/O复用机制中的以及信号事件的初始化。在本小节中,我们将看到有关信号事件的主要操作。

信号事件的注册

前面我们看到了信号事件是在何时何地如何被初始化的,一个事件无非就是初始化、注册、激活、回调、注销这几个重要的操作。接下来我们看看信号事件注册相关的,即evsignal_add函数,它在signal.c文件中定义。

int
evsignal_add(struct event *ev)
{
    int evsignal;
    struct event_base *base = ev->ev_base;
    struct evsignal_info *sig = &ev->ev_base->sig;
    //读/写事件不属于这儿
    if (ev->ev_events & (EV_READ|EV_WRITE))
        event_errx(1, "%s: EV_SIGNAL incompatible use", __func__);
    /*
     * 这里是个宏函数,在event.h中定义如下
     * #define EVENT_SIGNAL(ev)   (int)(ev)->ev_fd
     * 作用就是取得信号值
     */
    evsignal = EVENT_SIGNAL(ev);
    assert(evsignal >= 0 && evsignal < NSIG);
    //没有事件注册到该evsignal信号上
    if (TAILQ_EMPTY(&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值