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 + -
显示快捷键?