#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
void handler (int sig)
{
printf ("Got signal %d\n", sig);
}
int main (int argc, char *argv[])
{
struct sigaction act;
memset (&act, '\0', sizeof(act));
// Use the sa_sigaction field because
// the handler has two additional parameters
act.sa_handler = &handler;
if (sigaction(SIGHUP, &act, NULL) < 0) {
perror ("sigaction");
return EXIT_FAILURE;
}
if (sigaction(SIGTERM, &act, NULL) < 0) {
perror ("sigaction");
return EXIT_FAILURE;
}
while (1) sleep (10);
return EXIT_SUCCESS;
}
我对&#34;&amp; handler&#34;感到有点困惑。 。这是什么意思?我是新手,非常希望有人能给我一个如何运作的暗示。任何帮助,将不胜感激。 THX
答案 0 :(得分:0)
SIGACTION的手册页:
sigaction结构定义为:
struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)(void); };
[...]
`sa_handler` specifies the action to be associated with signum and may be SIG_DFL for the default action, SIG_IGN to ignore this signal, or a pointer to a signal handling function. This function receives the signal number as its only argument.
[...]
这里,sa_handler
是一个指向函数的指针,并保存handler()
函数的地址。
答案 1 :(得分:0)
如上所述here,
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};
sa_handler
是一个必须指向信号处理函数的函数指针。
sa_handler指定与signum和may关联的操作 是SIG_DFL的默认操作,SIG_IGN忽略此信号,或 指向信号处理功能的指针。这个功能收到了 信号号码作为唯一参数。