/* Test program that invokes the Linux system call rt_sigqueueinfo(). */ #include <signal.h> #include <string.h> #include <stddef.h> #include <stdlib.h> #include <stdio.h> #include <syscall.h> #include <unistd.h> int main(int argc, char **argv) { siginfo_t *si; const size_t sz = sizeof(*si); if (argc == 1) { fprintf(stderr, "sizeof(*si) = %zu\n", sz); fprintf(stdout, "offsetof(siginfo_t, si_signo) = %zd\n", offsetof(siginfo_t, si_signo)); fprintf(stdout, "offsetof(siginfo_t, si_errno) = %zd\n", offsetof(siginfo_t, si_errno)); fprintf(stdout, "offsetof(siginfo_t, si_code) = %zd\n", offsetof(siginfo_t, si_code)); fprintf(stdout, "offsetof(siginfo_t, _sifields) = %zd\n", offsetof(siginfo_t, _sifields)); } si = calloc(1, sz); si->si_signo = SIGWINCH; si->si_code = SI_QUEUE; si->si_pid = getpid(); si->si_uid = getuid(); syscall(__NR_rt_sigqueueinfo, getpid(), SIGWINCH, si); free(si); fprintf(stderr, "Done.\n"); return 0; }