From 72b7aebb0022f8e391c999348763acd5f7a16133 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 26 十一月 2020 18:56: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