test2.c

来自「这个是学习嵌入式开发的重要例子」· C语言 代码 · 共 112 行

C
112
字号
#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <string.h>#include <sys/types.h>#include <errno.h>void signal_handler(int s);static int check_set(sigset_t * set, int s);static int check_all(sigset_t * set);int main(int argc, char **argv){  sigset_t out_set;  // XXX: step 1, define a new sigset  sigset_t in_set;#if 0  fprintf(stdout, "SIG_BLOCK = %d\n", SIG_BLOCK);  fprintf(stdout, "SIG_SETMASK = %d\n", SIG_SETMASK);  fprSIG_BLOCKintf(stdout, "SIG_UNBLOCK = %d\n", SIG_UNBLOCK);#endif  // XXX: step 2, empty the new sigset  // int sigfillset(sigset_t *set);  sigemptyset(&in_set);  //check_set(&out_set, SIGINT);  // XXX: step 3, add SIGINT to new sigset  //int sigaddset(sigset_t *set, int signo);  sigaddset(&in_set, SIGINT);  sigaddset(&in_set, SIGTERM);  // XXX: step 4, update original sigset  sigprocmask(SIG_BLOCK, &in_set, &out_set);  // XXX: step 5, the original sigset is stored in out_set  check_set(&out_set, SIGINT);  check_set(&out_set, SIGTERM);  check_all(&out_set);  //int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);  if (sigprocmask(0, NULL, &out_set) < 0)  {    fprintf(stderr, "call sigprocmask() failed: %s\n", strerror(errno));    exit(1);  }  check_set(&out_set, SIGINT);  check_all(&out_set);  for (;;)  {  }  exit(0);  if (sigismember(&out_set, SIGINT))  {    fprintf(stdout, "SIGINT handler is set.\n");  }  else  {    fprintf(stdout, "SIGINT handler is not set.\n");  }  return 0;}static int check_set(sigset_t * set, int s){  int result;  //return sigismember(set, s);  if ((result = sigismember(set, s)))  {    fprintf(stdout, "signal %d is in set.\n", s);  }  else  {    fprintf(stdout, "signal %d is not in set.\n", s);  }  return result;}static int check_all(sigset_t * set){  int i;  int result;  for (i = 0; i < 32; i++)  {    if ((result = sigismember(set, i)))    {      fprintf(stdout, "[%s:%d:%s]signal %d is in set.\n", __FILE__, __LINE__, __func__, i);    }    else    {      fprintf(stdout, "[%s:%d:%s]signal %d is not in set.\n", __FILE__, __LINE__, __func__, i);    }  }  return result;}void signal_handler(int s){}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?