Sending a Signal: ANSI C Function raise()

ANSI C has a library function raise() for sending a signal to the program that contains this raise() call. The following is the function prototype:

int  raise(int sig)
If this function is executed successfully, the signal specified in sig is generated. If the program has a signal handler, this signal will be processed by the that signal handler; otherwise, this signal will be handled by the default way. If the call is unsuccessful, raise() returns a non-zero value.

Note that function raise() can only send a signal to the program that contains it. raise() cannot send a signal to other processes. To send a signal to other processes, the system call kill() should be used. Click here to learn more about kill().

Example

The following is example that demonstrates the use of function raise(). Click here to download this program.
#include  <stdio.h>
#include  <signal.h>

long  prev_fact, i;    

void  SIGhandler(int);     

void  SIGhandler(int sig)
{
     printf("\nReceived a SIGUSR1.  The answer is %ld! = %ld\n", 
               i-1, prev_fact);
     exit(0);
}

void  main(void)
{
     long  fact;

     printf("Factorial Computation:\n\n");
     signal(SIGUSR1, SIGhandler); 
     for (prev_fact = i = 1; ; i++, prev_fact = fact) { 
          fact = prev_fact * i;  
          if (fact < 0)        
               raise(SIGUSR1); 
          else if (i % 3 == 0)  
               printf("     %ld! = %ld\n", i, fact);
     }
}