在sigaction
手冊頁這是寫:sigaction:使用「void(* sa_sigaction)(int,siginfo_t *,void *);」
sa_sigaction
還指定要與signum
相關的動作。 該函數接收信號編號作爲其第一個參數, 指針指向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);
// ....
}
在哪裏可以在參數在平(在struct *
有澆注)傳遞foo
結構值???
不,你不能任意數據傳遞到信號處理程序。您只能控制'sigaction'結構並且沒有用戶數據字段。另外,對於要調用的信號函數的三變量變體,您必須指定「SA_SIGINFO」標誌。 –
你的困惑可能來自'ucontext_t'這個名字中的'u'?它並不代表「用戶數據」,它是引起信號的線程的堆棧結構。 –