sigqueue实例

创建于 2012-05-21

迁移自个人的百度空间

--------------------------------

作用:在队列中向指定进程发送一个信号和数据。

头文件:#include<signal.h>

 

int sigqueue(pid_t pid,int sig,const union sigval value);  

pid是目标进程的进程号  

sig是信号代号  

value参数是一个联合体,表示信号附带的数据,附带数据可以是一个整数也可以是一个指针,有如下形式: 

union sigval {  

    int sival_int;  

    void *sival_ptr;  

 };

例子:

#include <signal.h>

#include <unistd.h>



#include <string.h>

#include <stdio.h>



#include <time.h>



static char msg[] = "signal say hello to you.\n";

static time_t lasttime;



void show_msg(int signo)

{

        write(2, msg, strlen(msg)); //"2"标准错误输出

}



int main()

{

        struct sigaction act;

        union sigval val;



        act.sa_handler = show_msg;

        act.sa_flags = 0;

        sigemptyset(&act.sa_mask);

        sigaction(10, &act, NULL);



        time(&lasttime);

        while ( 1 )

        {

                time_t nowtime;

                /*获取当前时间*/

                time(&nowtime);

                /*和上一次的时间做比较,如果大于等于5秒,则立刻发送信号*/

                if (nowtime - lasttime >= 5)

                {

                        /*向主进程发送信号,实际上是自己给自己发信号*/

                        sigqueue(getpid(), 10, val);

                        lasttime = nowtime;

                }

        }

        return 0;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值