将参数传递给C中的信号处理程序 [英] Pass arguments to signal handler in C
问题描述
如何将参数(例如,指向结构的指针)传递给信号处理程序? 我正在编写一个多线程应用程序,所以不能使用全局变量
How can I pass arguments (e.g. a pointer to a struct) to a signal handler? I'm writing a multithread application, so I cannot use global variables
我将计时器与每个线程相关联.当计时器到期时,我必须更新一个结构(每个线程都有一个不同的结构).
I associate a timer to each thread. When timer expires I have to update a struct (each thread has a different struct).
我该怎么办?
推荐答案
POSIX计时器允许使用
POSIX timers allow to specify the details of how your process will be notified of an expiration using the struct sigevent
structure documented in sigevent(7).
要将上下文信息传递给生成信号的信号处理程序,您可以设置.sigev_value.sival_ptr
成员,然后您的信号处理程序将可以检索该成员(您需要通过.sa_sigaction
设置信号处理程序struct sigaction
的成员,同时确保结构的.sa_flags
与SA_SIGINFO
进行或运算.
To pass context info to the siggnal handler for the generated signal, you can set the .sigev_value.sival_ptr
member, which your signal handler will then be able to retrieve (you'll need to set the signal handler via the .sa_sigaction
member of struct sigaction
, while making sure the structure's .sa_flags
is ORred with SA_SIGINFO
).
这篇关于将参数传递给C中的信号处理程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!