C 语言 raise()

raise() 函数定义在 signal.h 头文件中。它有助于引发参数中指定的信号,并且与 SIG 宏兼容。

int raise(int sig); #where sig should be in integer

  

raise() 参数:

raise() 函数接受一个信号编号作为其参数。一些重要的标准信号编号是:

  • SIGABRT:异常终止,例如由函数启动的终止
  • SIGFPE:错误的算术运算,例如除零或导致溢出的运算
  • SIGILL:无效函数图像,例如非法指令。
  • SIGINT:交互式注意信号。通常由应用程序用户生成。
  • SIGSEGV:无效的存储访问 – 当程序试图读取或写入其分配内存之外的区域时。
  • SIGTERM:发送给程序的终止请求。

 

参数 描述 必需/可选
sig 要发送的信号编号 必需

raise() 返回值

raise() 函数成功时返回零,失败时返回非零。如果传入的参数不是有效信号,则会调用无效参数处理程序。

输入 返回值
如果成功
如果失败 非零

raise() 示例

示例 1:C 语言中 raise() 函数的工作原理?


#include <stdio.h>
#include <signal.h>
void signal_catchfunc(int);

int main () {
   int output;

   output = signal(SIGINT, signal_catchfunc);

   if( output == SIG_ERR) {
      printf("Error: unable to set signal handler.\n");
      exit(0);
   }
   printf("Signal is raising...\n");
   output = raise(SIGINT);
   
   if( output !=0 ) {
      printf("Error: unable to raise SIGINT signal.\n");
      exit(0);
   }

   printf("Going to Exit...\n");
   return(0);
}

void signal_catchfunc(int signal) {
   printf("! The is signal caught !\n");
}

输出


Signal is raising...
! The is signal caught !
Going to Exit...

示例 2:C 语言中 raise() 函数如何工作?


#include <stdio.h>
#include <signal.h>
void signal_handler(int sig)
{
    
    if (sig == SIGUSR1) printf("SIGUSR1 signal is Received..   \n");

    
    exit(0);
}

int main(int argc, const char * argv[])
{
    
    printf("Signal handler is registering..\n");

   
    signal(SIGUSR1, signal_handler);

    
    printf("SIGUSR1 signal is Raising..\n");

   
    raise(SIGUSR1);

   
    printf("Finished main\n");

    return 0;
}

输出


Signal handler is registering..
SIGUSR1 signal is Raising..
SIGUSR1 signal is Received..