创建于 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;
}