
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

void sigHandler (int sigNumber, siginfo_t *pInfo, void *pX)
{
   printf ("receive Parameter sigNumber is %d\n", sigNumber);
   printf ("receive the data from sigqueue by pInfo->si_signo is %d\n",           pInfo->si_signo);
	// si_code muß -1 sein (SI_QUEUE)
   printf ("receive the data from sigqueue by pInfo->si_code  is %d\n\n",         pInfo->si_code);
   printf ("receive the data from sigqueue by pInfo->si_status  is %d\n",         pInfo->si_status);
   printf ("receive the data from sigqueue by pInfo->si_pid   is %d\n",         pInfo->si_pid);
   printf ("receive the data from sigqueue by pInfo->si_value.sival_int is %d\n", pInfo->si_value.sival_int);
}

main (void)
{
  struct sigaction act;
  act.sa_sigaction = sigHandler;
  sigemptyset (&act.sa_mask);
  sigaddset (&act.sa_mask, SIGUSR1);

  act.sa_flags = SA_SIGINFO;
		// SA_SIGINFO 4; SA_NOCLDSTOP 1; SA_NOCLDWAIT 2 ...
		// bits/sigaction.h
  int qu (0);
  // if ((qu = sigaction(SIGUSR1, &act, NULL)) == -1) 
  if ((qu = sigaction(SIGUSR1, NULL, NULL)) == -1) 
  {
     printf(" sigaction err\n");
     exit (0);
  }
  else
     printf(" Returncode aus sigaction = 0 (OK) \n");

  printf ("\nVor pause():\n\n");
  printf ("waiting a SIGUSR1 -  signal ... my pid is %d\n", getpid());
  pause();
//   psignal (SIGUSR1, "\n ++++++ \n");
  printf ("\nNach pause():\n");
  printf ("\nSIGUSR1 - Signal %d wurde empfangen\n", SIGUSR1);
  return 1;
}

