diff options
author | Mattias Andrée <maandree@kth.se> | 2020-06-01 15:23:05 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2020-06-01 15:23:05 +0200 |
commit | 3b401b823ca98e6329450874eadeaa5f5c120cd1 (patch) | |
tree | 45bbac972b106f6fb1c8e2c48d3b937f7e169077 /tests/siginfo.c | |
parent | Use WCOREDUMP rather than __WCOREDUMP (diff) | |
download | sctrace-3b401b823ca98e6329450874eadeaa5f5c120cd1.tar.gz sctrace-3b401b823ca98e6329450874eadeaa5f5c120cd1.tar.bz2 sctrace-3b401b823ca98e6329450874eadeaa5f5c120cd1.tar.xz |
Add tests for manually testing
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
-rw-r--r-- | tests/siginfo.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/siginfo.c b/tests/siginfo.c new file mode 100644 index 0000000..9672870 --- /dev/null +++ b/tests/siginfo.c @@ -0,0 +1,64 @@ +#include <signal.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +const char * +strsigcode(int code) +{ + switch (code) { + case SI_USER: + return "SIG_USER"; + case SI_KERNEL: + return "SIG_KERNEL"; + case SI_QUEUE: + return "SIG_QUEUE"; + case SI_TIMER: + return "SIG_TIMER"; + case SI_MESGQ: + return "SIG_MESGQ"; + case SI_ASYNCIO: + return "SIG_ASYNCIO"; + case SI_SIGIO: + return "SIG_SIGIO"; + case SI_TKILL: + return "SIG_TKILL"; + default: + return "???"; + } +} + +void +handler(int signo, siginfo_t *info, void *frame) +{ + (void) signo; + (void) frame; + fprintf(stderr, ".si_signo: %i (%s)\n", info->si_signo, strsignal(info->si_signo)); + fprintf(stderr, ".si_code: %i (%s)\n", info->si_code, strsigcode(info->si_code)); + fprintf(stderr, ".si_errno: %i\n", info->si_errno); + if (info->si_code == SI_USER || info->si_code == SI_TKILL || info->si_code == SI_QUEUE) { + fprintf(stderr, ".si_pid: %ju\n", info->si_pid); + fprintf(stderr, ".si_uid: %ju\n", info->si_uid); + if (info->si_code == SI_QUEUE) { + fprintf(stderr, ".si_value.sival_int: %i\n", info->si_value.sival_int); + fprintf(stderr, ".si_value.sival_ptr: %p\n", info->si_value.sival_ptr); + } + } + _exit(1); +} + +int +main(void) +{ + static union sigval value; + static struct sigaction sa; + sa.sa_sigaction = handler; + sa.sa_flags = SA_SIGINFO; + sigaction(SIGRTMAX, &sa, 0); + value.sival_int = 1444; + sigqueue(getpid(), SIGRTMAX, value); + pause(); + return 0; +} |