信号
优质
小牛编辑
143浏览
2023-12-01
信号接口
结构体 | |
struct | siginfo_node |
信号控制块 更多... | |
函数 | |
rt_sighandler_t | rt_signal_install (int signo, rt_sighandler_t handler) |
信号安装 | |
void | rt_signal_mask (int signo) |
信号阻塞 | |
void | rt_signal_unmask (int signo) |
解除信号阻塞 | |
int | rt_signal_wait (const rt_sigset_t *set, rt_siginfo_t *si, rt_int32_t timeout) |
等待信号 | |
int | rt_thread_kill (rt_thread_t tid, int sig) |
信号的发送 | |
详细描述
信号接口
软中断信号(signal,又简称为信号)用来通知线程发生了异步事件。在软件层次上是对中断机制的一种模拟, 在原理上,一个线程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是线程间通信机制中唯一的 异步通信机制,一个线程不必通过任何操作来等待信号的到达,事实上,线程也不知道信号到底什么时候到达, 线程之间可以互相通过调用 kill 发送软中断信号。
收到信号的线程对各种信号有不同的处理方法。处理方法可以分为三类:
- 第一种是类似中断的处理程序,对于需要处理的信号,线程可以指定处理函数,由该函数来处理。
- 第二种方法是,忽略某个信号,对该信号不做任何处理,就象未发生过一样。
- 第三种方法是,对该信号的处理保留系统的默认值。
函数说明
rt_sighandler_t rt_signal_install | ( | int | signo, |
rt_sighandler_t | handler | ||
) |
信号安装
如果线程要处理某一信号,那么就要在线程中安装该信号。安装信号主要 用来确定信号值及线程针对该信号值的动作之间的映射关系,即线程将要处理 哪个信号;该信号被传递给线程时,将执行何种操作。
- 参数
signo 信号值(只有 SIGUSR1 和 SIGUSR2 是开放给用户使用的) handler 信号值的处理。可以忽略该信号(参数设为 SIG_IGN); 可以采用系统默认方式处理信号 (参数设为 SIG_DFL);也可以自己实现 处理方式 (参数指定一个函数地址)。
- 注解
- 成功安装信号前的 handler 值,失败返回SIG_ERR。
- 示例:
- signal_sample.c.
void rt_signal_mask | ( | int | signo | ) |
信号阻塞
该函数将阻塞指定的信号。
- 参数
signo 指定的信号值
void rt_signal_unmask | ( | int | signo | ) |
解除信号阻塞
该函数将解除指定信号的阻塞。
- 参数
signo 指定的信号值
- 示例:
- signal_sample.c.
int rt_signal_wait | ( | const rt_sigset_t * | set, |
rt_siginfo_t * | si, | ||
rt_int32_t | timeout | ||
) |
等待信号
该函数将等待 set 信号的到来,如果没有等到这个信号,则把线程给挂起来, 直到等到这个信号或者等待时间超过指定的超时时间 timeout。
- 参数
set 指定等待的信号值 si 等待的信号句柄 timeout 指定的超时时间
int rt_thread_kill | ( | rt_thread_t | tid, |
int | sig | ||
) |
信号的发送
调用该函数可以用来向任何线程发送任何信号。
- 参数
tid 接收信号的线程 sig 指定的信号值
- 示例:
- signal_sample.c.