【发布时间】:2017-07-03 07:13:31
【问题描述】:
在sigaction 联机帮助页中写道:
sa_sigaction 还指定要与signum 关联的操作。
这个函数接收信号编号作为它的第一个参数,a
指向 siginfo_t 的指针作为其第二个参数和指向 ucon-
text_t(转换为void*)作为其第三个参数。
所以我们可以将参数传递给信号处理程序(通过void*),但我
找不到路。
有没有办法把它放在任何地方?
例子:
struct ping_val
{
int data1;
int data2;
};
void ping(int sig, siginfo_t *siginf, void *ptr)
{
// ....
}
int main()
{
struct sigaction sa_ping;
ping_val foo;
foo.data1 = 3;
foo.data2 = 4;
sa_ping.sa_sigaction = ping;
sigemptyset(&sa_ping.sa_mask);
sa_ping.sa_flags = 0;
sigaction(SIGALRM, &sa_ping, NULL);
// ....
}
在哪里我可以在 ping 的参数中传递 foo 结构值(在 struct * 中进行转换)???
【问题讨论】:
-
不,您不能将任意数据传递给信号处理程序。您只能控制
sigaction结构,它没有用户数据字段。此外,对于要调用的信号函数的三参数变体,您必须指定SA_SIGINFO标志。 -
你的困惑可能来自
ucontext_t这个名字中的u?它不代表“用户数据”,它是导致信号的线程堆栈帧的结构。
标签: c++ c pointers struct signals