ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux C/C++编程:signal

2021-01-10 12:58:33  阅读:331  来源: 互联网

标签:int signal SIGINT C++ handler Linux include void


signal

理论

函数原型:

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

  • signum参数:传入的信号类型
  • handler参数:处理信号的函数,函数接受一个整型参数,用于表示信号;函数的返回值是void类型。在函数内部编写处理信号的方法。

示例

#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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有