From f462d191f5ded9f9992837862fd97f5c1a536bce Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期二, 01 十二月 2020 16:49:33 +0800 Subject: [PATCH] update --- test/test.c | 50 +++++++++++++++++++++++++++++++++++++------------- 1 files changed, 37 insertions(+), 13 deletions(-) diff --git a/test/test.c b/test/test.c index 0aaa68e..ab21287 100644 --- a/test/test.c +++ b/test/test.c @@ -1,15 +1,39 @@ #include "usg_common.h" -#include "usg_typedef.h" - -int test(char *src, int size) { - int i = strlen(src); - char dest[size]; - strncpy(dest, src, size); - puts(dest); - return i; +static void sig_quit(int); +int +main(void) +{ + sigset_t + newmask, oldmask, pendmask; + if (signal(SIGQUIT, sig_quit) == SIG_ERR) + err_exit(errno, "can鈥檛 catch SIGQUIT"); + /* + * Block SIGQUIT and save current signal mask. + */ + sigemptyset(&newmask); + sigaddset(&newmask, SIGQUIT); + if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0) + err_exit(errno, "SIG_BLOCK error"); + sleep(5); + /* SIGQUIT here will remain pending */ + if (sigpending(&pendmask) < 0) + err_exit(errno, "sigpending error"); + if (sigismember(&pendmask, SIGQUIT)) + printf("\nSIGQUIT pending\n"); + /* + * Restore signal mask which unblocks SIGQUIT. + */ + if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) + err_exit(errno, "SIG_SETMASK error"); + printf("SIGQUIT unblocked\n"); + sleep(5); + exit(0); + /* SIGQUIT here will terminate with core file */ } -int main() { - char *str = "hello"; - int r = test(str, strlen(str)); - printf("%d\n", r); -} \ No newline at end of file + +static void sig_quit(int signo) +{ + printf("caught SIGQUIT\n"); + if (signal(SIGQUIT, SIG_DFL) == SIG_ERR) + err_exit(errno, "can鈥檛 reset SIGQUIT"); +} -- Gitblit v1.8.0