当前位置: 首页 > news >正文

信号相关的程序

1、不断打印*换行之后响应信号,然后循环 

#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
static void alrm_handler(int signo)
{write(1,"!",1);
}int main( int argc, char** argv)
{sigset_t set,oset,saveset;signal(SIGINT,alrm_handler);sigemptyset(&set);sigaddset(&set,SIGINT);sigprocmask(SIG_UNBLOCK,&set,&saveset);for( int j = 0 ; j < 100; j++){sigprocmask(SIG_BLOCK,&set,&oset);for( int  i = 0; i <5;i++){sleep(1);write(1,"*",1);}write(1,"\n",1);sigprocmask(SIG_SETMASK,&Oset,NULL);     }sigprocmask(SIG_SETMASK,&saveset,NULL);exit(0);
}

 2、打印一行* 等待信号,信号来了才开始打印,然后重复,使用的是标准信号

#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
static void alrm_handler(int signo)
{write(1,"!",1);
}int main( int argc, char** argv)
{sigset_t set,oset,saveset;signal(SIGINT,alrm_handler);sigemptyset(&set);sigaddset(&set,SIGINT);sigprocmask(SIG_UNBLOCK,&set,&saveset);sigprocmask(SIG_BLOCK,&set,&oset);for( int j = 0 ; j < 100; j++){for( int  i = 0; i <5;i++){sleep(1);write(1,"*",1);}write(1,"\n",1);sigsuspend(&oset);    /*sigset_t tmpset;sigprocmask(SIG_UNBLOCK,&set,&tmpset);pause();sigprocmask(SIG_SETMASK,&tmpset,NULL);*/}sigprocmask(SIG_SETMASK,&saveset,NULL);exit(0);
}

 2、打印一行* 等待信号,信号来了才开始打印,然后重复,使用实时信号


#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#define MYRTSIG   (SIGRTMIN+6)
static void mysig_handler(int signo)
{write(1,"!",1);
}int main( int argc, char** argv)
{sigset_t set,oset,saveset;signal(MYRTSIG,mysig_handler);sigemptyset(&set);sigaddset(&set,MYRTSIG);sigprocmask(SIG_UNBLOCK,&set,&saveset);sigprocmask(SIG_BLOCK,&set,&oset);for( int j = 0 ; j < 100; j++){for( int  i = 0; i <5;i++){sleep(1);write(1,"*",1);}write(1,"\n",1);sigsuspend(&oset);}sigprocmask(SIG_SETMASK,&saveset,NULL);exit(0);
}

实时信号不丢失,会排队。 

使用ulimit -a  查看pending signals 字段 显示实时信号最大的排队数量

 


http://www.mrgr.cn/news/95721.html

相关文章:

  • 安装docker版jira8.0.2
  • 作业12 (2023-05-15 指针概念)
  • 新手使用qt6 编译mysql驱动的坑
  • 解锁 AWX+Ansible 自动化运维新体验:快速部署实战
  • 内核编程十:进程的虚拟地址空间
  • 穿越之程序员周树人的狂人日记Part3__人机共生纪元
  • 数据结构篇:空间复杂度和时间复杂度
  • C++学习之路:filesystem文件系统的使用(C++17特性)
  • 【LeetCode】算法详解#1 ---字母异位词
  • jangow靶机攻略
  • 中间件解析漏洞之Tomcat集合
  • 大模型的后训练(post-training)方法
  • JDK 24:Java 24 中的新功能
  • K8s 是什么? 基本元件、核心功能、4 大优点一次看!
  • Unity Shader编程】之复杂光照
  • RAG优化:Python从零实现强化学习RL增强
  • C语言动态内存管理深度解析与嵌入式开发实战
  • C++类与对象的第二个简单的实战练习-3.24笔记
  • RAG优化:python从零实现时间管理大师Self-RAG
  • Apollo 相关知识点