gpt4 book ai didi

c++ - sigaction : using "void (*sa_sigaction)(int, siginfo_t *, void *);"

转载 作者:太空宇宙 更新时间:2023-11-04 04:22:41 26 4
gpt4 key购买 nike

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 * 中进行转换)???

最佳答案

您不能将任何参数传递给信号处理程序,因为您永远不会自己调用它。信号处理程序由对您的参数一无所知的操作系统调用。

让信号处理程序与主程序通信的标准方法是通过全局(或文件范围)变量。

关于c++ - sigaction : using "void (*sa_sigaction)(int, siginfo_t *, void *);",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44879718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com