sigqueue实例

创建于 2012-05-21

迁移自个人的百度空间

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

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

头文件:#include

 

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

pid是目标进程的进程号  

sig是信号代号  

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

union sigval {  

    int sival_int;  

    void *sival_ptr;  

 };

例子:

#include 

#include 



#include 

#include 



#include 



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;

}

 

你可能感兴趣的:(嵌入式系统开发,Linux,C)