系统相关
首页 > 系统相关> > Linux C/C++编程:signal

Linux C/C++编程:signal

作者:互联网

signal

理论

函数原型:

#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

示例

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

void sig_handler(int signo) {
  if (signo == SIGINT) {
    puts("received SIGINT");
  }
}

int main() {
  if (signal(SIGINT, sig_handler) == SIG_ERR) {
    puts("can not catch SIGINT");
  }

  while (1) { 
    sleep(1);
  }

  return 0;
}

在这里插入图片描述

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

void  handler();

int main()
{
    int i;

    signal(SIGALRM,handler);
    alarm(5);

    for(i=1;i<8;i++){
        printf("sleep is -----%d\n",i);
        sleep(1);
    }
    return 0;
}

void  handler()
{
    printf("hello\n");
}


在这里插入图片描述
同一种信号多次发生,通常并不讲它们排队,所以如果在某种信号被阻塞时它发生了五次,那么对这种信号解除阻塞后,其信号处理函数通常只会被调用一次。

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
static void sig_int(int);

int main(void)
{
    if(signal(SIGINT,sig_int) == SIG_ERR)
        perror("can't catch SIGINT\n");

    for(;;)
        pause;
}

void sig_int(int signo)
{
    printf("received SIGINT\n");
    sleep(10);
    printf("after sleep 10s\n");
}

在这里插入图片描述

标签:int,signal,SIGINT,C++,handler,Linux,include,void
来源: https://blog.csdn.net/zhizhengguan/article/details/112426670