UNIX C 信号
2024-08-26 16:11:42
1.信号处理
#include <signal.h> typedef void(*sighander_t)(int); sighander_t signal(int signum,sighander_t hander)
成功返回原信号处理方式,失败返回SIGERR --signum :信号编号
--hander: 信号处理方式
SIG_IGN:忽略信号
SIG_DFL:默认操作
信号处理函数指针 -捕获信号
2.信号处理函数
void sighander(int signum)
{
信号处理代码;
}
3.调用函数发送信号
杀死进程信号
#include <signal.h> int kill (pid_t pid,int signum); 成功发送信号并返回0,失败-
向调用进程发送信号
#include <signal.h> int raise(int signum); raise函数是向调用进程发送信号
对单线程程序来说,相当于
kill(getpid,signum);
对多线程程序来说,相当于
pthread_kill(pthread_self,signum);
4.暂停
#include <unistd.h> int pause(void);
该函数无时限睡眠,只到收到信号发生,改变自身状态
成功阻塞,失败-;
5.睡眠
sleep(seconds)
#include <unistd.h> unsigned int sleep(unsigned int seconds); 返回0或剩余秒数 该函数调用进(线)程睡眠seconds秒,除非信号打破这种状态
usleep
#include <unistd.h> int usleep(usecond_t usec); --usec 微秒
成功返回0,失败 -
6.闹钟
alarm
#include <unistd.h> unsigned int alarm(unsigned int seconds); 返回剩余秒数
7.信号集
填满信号集
#include <signal.h> int sigfillset(sigset_t* sigset); --sigset :信号集
清空信号集
#include <signal.h> int sigemptyset(sigset_t* sigset); 成功0,失败-
加入信号
#include <signal.h> int sigaddset(sigset_t* sigset,int signum); 成功0,失败- --sigset :信号集
--signum:信号编号
删除信号
#include <signal.h> int sigdelete(sigset_t* sigset,int signum); 成功0,失败-
判断信号是否在信号集中
#include <signal.h> sigismember(const sigset_t* sigset,int signum); 有返回1,没有0,失败-
8.信号屏蔽
信号掩码
#include <signal.h> int sigprocmask(int how,const sigest_t* sigset,sigset_t* oldsigset); --how有一下取值
SIG_BLOCK 将sigset信号加入当前信号掩码
SIG_UNBLOCK 从当前信号掩码中删除sigset信号
SIG_SETMASK sigset设置当前信号掩码
获取调用进程的未决信号
#include <signal.h> int sigpending(sigset_t* sigset); 成功返回0,失败返回- 输出未决信号集 sigset
9.定时器
#include <sys/time.h> int setitimer(int which,
const struct itimerval* new_value,
struct itimercal* old value); 成功返回0,失败返回- --which有下面取值
ITIMER_REAL 真实定时器
ITIMER_VIRTUAL 虚拟定时器
ITIMER_PROF 实用定时器 struct itimerval{
//重复间隔,取0发送一个信号后,停止
struct timerval it_interval;
//初始间隔,取0立即停止计时器
struct timerval it_value;
}; struct timerval{
long tv_sec;
long tv_usec;
};
10.管道
mkfifo myfifo //创建有名管道
#include <sys/stat.h> int mkfifo(const char* pathname,
mode_t mode); --pathname :文件路径
--mode:权限模式
无名管道-- 用于父子进程通信
#include <unistd.h> int pipe(int pipefd[]); 成功0,失败- pipefd:输出两个文件描述符 pipefd[]: 无名管道读取数据端
pipefd[]:无名管道写入数据端
最新文章
- 转载一篇React native的props的用法
- 为图片添加九宫格信息-UI界面编辑器(SkinStudio)教程
- 酷摄影:关于梦 - Miki takahashi
- 取caml查询结果的前多少行
- 【搬运】一分钟快速入门OpenStack
- SQLServer 安装以前的某个程序安装已在安装计算机上创建挂起的文件操作 解决办法
- 通过jpegoptim批量压缩文件
- 《转载》值得学习!Google的编程样式指南
- sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同
- Struts2 程序步骤
- React&;Webpack 环境安装
- java1.8新特性
- 手把手教你用npm发布一个包,详细教程
- cas-5.3.x接入REST登录认证,移动端登录解决方案
- Sobel 边缘检测算子
- 【原创】运维基础之Ansible(1)简介、安装和使用
- Putty的用法
- WEB后台认证机制
- 浅谈Retrofit2+Rxjava2
- 20155233 《Java程序设计》 实验三 敏捷开发与XP实践
热门文章
- 目标跟踪学习系列十:Struck:Structured Output Tracking with Kernels 代码调试
- [Windows]_[0基础]_[Release程序的崩溃报告minidump解决方式]
- POJ 3653 &;amp; ZOJ 2935 &;amp; HDU 2722 Here We Go(relians) Again(最短路dijstra)
- 详略。。设计模式1——单例。。。。studying
- DotNetBar.Bar作为容器使用的方法及Text更新原理
- 4、angularJS过滤器
- HDU1573 X问题【一元线性同余方程组】
- Android休眠唤醒机制简介(二)
- Mongo 中间件 pre find 修改query
- 2017 Multi-University Training Contest - Team 2 &;hdu 6055 Regular polygon