#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
void New_op (int,siginfo_t*,void*);
int main (int argc,char**argv)
{
struct Sigaction Act;
Union Sigval Mysigval;
int i;
int sig;
pid_t pid;
Char data[10];
memset (data,0,sizeof (data));
For (I=0;i < 5;i++)
data[i]= ' 2 ';
Mysigval.sival_ptr=data;
Sig=atoi (argv[1]);
Pid=getpid ();
Sigemptyset (&act.sa_mask);
Act.sa_sigaction=new_op;
Act.sa_flags=sa_siginfo;
if (Sigaction (Sig,&act,null) < 0)
{
printf ("Install Sigal error\n");
}
while (1)
{
Sleep (2);
printf ("Wait for the signal\n");
Sigqueue (Pid,sig,mysigval);
}
}
void New_op (int signum,siginfo_t *info,void *myact)
{
int i;
for (i=0;i<10;i++)
{
printf ("%c\n", (* ((char*) (((*info) si_ptr) +i));
}
printf ("handle signal%d over;", Signum);
}
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
void new_op (int, siginfo_t*, void*);
int main (int argc, char **argv)
{
struct Sigaction Act;
int Sig;
sig = Atoi (Argv[1]);
Sigemptyset (&act.sa_mask);
act.sa_flags = sa_siginfo;
act.sa_sigaction = new_op;
if (sigaction (Sig,&act,null) < 0)
{
printf ("Install Sigal error\n");
}
while (1)
{
sleep (2 );
printf ("Wait for the signal\n");
}
}
void New_op (int signum,siginfo_t *info,void *myact)
{
printf ("Receive signal%d", signum);
Sleep (5);
}
#include "signal.h"
#include "Unistd.h"
static void My_op (int);
int main (int argc, char **argv)
{
sigset_t New_mask,old_mask,pending_mask;
struct Sigaction Act;
Sigemptyset (&act.sa_mask);
Act.sa_flags=sa_siginfo;
act.sa_sigaction= (void*) my_op;
if (Sigaction (sigrtmin+10,&act,null))
printf ("Install signal sigrtmin+10 error\n");
Sigemptyset (&new_mask);
Sigaddset (&NEW_MASK,SIGRTMIN+10);
if (Sigprocmask (Sig_block, &new_mask,&old_mask))
printf ("Block signal sigrtmin+10 error\n");
Sleep (10);
printf ("Now begin to get pending mask and unblock sigrtmin+10\n");
if (sigpending (&pending_mask) <0)
printf ("Get Pending Mask error\n");
if (Sigismember (&pending_mask,sigrtmin+10))
printf ("Signal sigrtmin+10 is pending\n");
if (Sigprocmask (sig_setmask,&old_mask,null) <0)
printf ("Unblock signal error\n");
printf ("Signal unblocked\n");
Sleep (10);
}
static void My_op (int signum)
{
printf ("Receive signal%d \ n", Signum);
}
Linux Signal Demo