C/C++ code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
void sig_action(int signo, siginfo_t *info, void *addr)
{
printf("%s [%s:%d]\n", info->si_value.sival_ptr, __FILE__, __LINE__);
}
int main(int argc, char* const argv[])
{
struct sigaction act;
char *data;
data = malloc(100);
sprintf(data, "Hello %10d", getpid());
printf("%s [%s:%d]\n", data, __FILE__, __LINE__);
act.sa_sigaction = sig_action;
act.sa_flags = SA_SIGINFO;
sigaction(SIGUSR1, &act, NULL);
pid_t pid;
if ((pid = fork()) == -1) {
return 1;
} else if (pid == 0) {
union sigval val;
val.sival_ptr = data;
sprintf(data, "Hello %10d", getpid());
printf("%s [%s:%d]\n", data, __FILE__, __LINE__);
sigqueue(getppid(), SIGUSR1, val);
}
while (((pid = wait(0)) == -1 && errno == EINTR) || pid > 0) {
}
return 0;