Path: blob/main/tools/regression/sigqueue/sigqtest1/sigqtest1.c
39491 views
#include <err.h>1#include <errno.h>2#include <signal.h>3#include <stdio.h>4#include <unistd.h>56int received;78void9handler(int sig, siginfo_t *si, void *ctx)10{11if (si->si_code != SI_QUEUE)12errx(1, "si_code != SI_QUEUE");13if (si->si_value.sival_int != received)14errx(1, "signal is out of order");15received++;16}1718int19main()20{21struct sigaction sa;22union sigval val;23int ret;24int i;25sigset_t set;2627sa.sa_flags = SA_SIGINFO;28sigemptyset(&sa.sa_mask);29sa.sa_sigaction = handler;30sigaction(SIGRTMIN, &sa, NULL);31sigemptyset(&set);32sigaddset(&set, SIGRTMIN);33sigprocmask(SIG_BLOCK, &set, NULL);34i = 0;35for (;;) {36val.sival_int = i;37ret = sigqueue(getpid(), SIGRTMIN, val);38if (ret == -1) {39if (errno != EAGAIN) {40errx(1, "errno != EAGAIN");41}42break;43}44i++;45}46sigprocmask(SIG_UNBLOCK, &set, NULL);47if (received != i)48errx(1, "error, signal lost");49printf("OK\n");50}515253