码迷,mamicode.com
首页 > 其他好文 > 详细

UNIX C 信号

时间:2017-11-09 15:00:35      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:调用函数   信号处理   member   raise   指针   new   hand   name   --   

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,失败-1

  

  向调用进程发送信号

#include <signal.h>

int raise(int signum);

raise函数是向调用进程发送信号
对单线程程序来说,相当于
    kill(getpid,signum);
对多线程程序来说,相当于
    pthread_kill(pthread_self,signum);

 

4.暂停

#include <unistd.h>

int pause(void);
该函数无时限睡眠,只到收到信号发生,改变自身状态
成功阻塞,失败-1;

 

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,失败 -1

 

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,失败-1

  

  加入信号

#include <signal.h>

int sigaddset(sigset_t* sigset,int signum);

成功0,失败-1

--sigset :信号集
--signum:信号编号

 

  

  删除信号

#include <signal.h>

int sigdelete(sigset_t* sigset,int signum);

成功0,失败-1

 

  

  判断信号是否在信号集中

#include <signal.h>

sigismember(const sigset_t* sigset,int signum);

有返回1,没有0,失败-1

 

 

 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,失败返回-1

输出未决信号集 sigset

 

9.定时器

  

#include <sys/time.h>

int setitimer(int which,
    const struct itimerval* new_value,
    struct itimercal* old value);

成功返回0,失败返回-1

--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[2]);

成功0,失败-1

pipefd:输出两个文件描述符

pipefd[0]: 无名管道读取数据端
pipefd[1]:无名管道写入数据端

 

UNIX C 信号

标签:调用函数   信号处理   member   raise   指针   new   hand   name   --   

原文地址:http://www.cnblogs.com/Kernel001/p/7808640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!