代码中&处理程序的含义是什么?

时间:2017-11-07 05:13:43

标签: c

#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

2 个答案:

答案 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忽略此信号,或          指向信号处理功能的指针。这个功能收到了          信号号码作为唯一参数。