#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
typedef struct _DELETE_FILE_PARA_STR
{
int IntDays;
char *StrPaths;
}DeleteFileParaStr;
//sigaction=signal
DeleteFileParaStr StrPara = {9876,"/root/test|/var/data"};
void handle(int s,siginfo_t *info,void *d)
{
DeleteFileParaStr *pUnionPara = (DeleteFileParaStr*)info->si_ptr;
printf("SIGUSR1 handle parameter: %d, %s\n\n",pUnionPara->IntDays,pUnionPara->StrPaths);
}
void handle_timer(int s)
{
printf("handle_timer begin...\n");
union sigval val;
val.sival_ptr = &StrPara;
sigqueue(getpid(),SIGUSR1,val);
}
main()
{
struct sigaction act={};
act./*2*/sa_sigaction=handle;//采用非传统处理函数
sigemptyset(&(act.sa_mask));
act.sa_flags=/*1*/SA_SIGINFO;//0表示采用传统处理函数
//SA_SIGINFO表示采用数据传递处理函数
sigaction(SIGUSR1,&act,0); //注册信号与信号行为
/*定时器工作*/
struct itimerval val={};
signal(SIGALRM,handle_timer);
val.it_interval.tv_sec=2;
val.it_value.tv_usec=1;
setitimer(ITIMER_REAL,&val,0);
while(1);
}
/* 输出结果
handle_timer begin...
SIGUSR1 handle parameter: 9876, /root/test|/var/data
handle_timer begin...
SIGUSR1 handle parameter: 9876, /root/test|/var/data
handle_timer begin...
SIGUSR1 handle parameter: 9876, /root/test|/var/data
handle_timer begin...
SIGUSR1 handle parameter: 9876, /root/test|/var/data
handle_timer begin...
SIGUSR1 handle parameter: 9876, /root/test|/var/data
*/