我知道信号是如何在POSIX中定义的实时信号。但是我很想知道如何使用这些信号,或者这些信号是如何产生的?就像在无效内存引用上生成SIGSEGV一样,在键盘中断上生成SIGINT,如ctrl + c。
如何生成和使用SIGRTMAX和SIGRTMIN等信号?
答案 0 :(得分:4)
实际上我确实弄明白了如何为SIGRTMAX和SIGRTMIN生成信号。
如果有人在将来遇到这个 -
首先使用 struct sigaction ,根据您的要求设置成员。将 sa_handler 设置为您想要处理信号生成的函数。
要将此功能付诸实践,您可以使用函数 sigaction()传递linux手册中指定的参数。
现在您使用 struct sigevent 设置其中的成员来指定要处理的信号编号以及如何为其发送通知。
有了这个你完成了设置,现在你需要创建一个现象或事件,它会产生信号,就像时间到期一样。
这是通过 create_timer()获取计时器处理程序来实现的,这会将sigevent与处理程序相关联。
然后使用 struct itimerspec 设置到期时间间隔,然后使用 timer_settime()将到期时间与处理程序相关联。
所以现在到期与处理程序相关联,时间处理程序与sigevent和sigevent重定向相关联,这些重定向通过sigaction信号发送给处理程序