问题描述
- 急求大神解决一下这个问题c信号传递
-
#include
#include
#includeint main(int argc, char ** argv)
{
union sigval value;
int signum = SIGTERM; // 默认发送SIGTERM
pid_t pid;
int i;/*初始化*/
value.sival_int = 0;/*检查参数的个数*/
if (argc != 3 && argc != 5 && argc != 7) {
printf("./send_data_signo <-d data> <-s signum> [-p][data]n");
exit(1);
}/*从命令行参数解析出信号编号、PID以及待传递的数据*/
for (i=1; i<argc; i++) {
if (!strcmp(argv[i], "-d")) {
value.sival_int = argv[i+1]; //指针指向参数中的字符串
continue;
}
if (!strcmp(argv[i], "-s")) {
signum = atoi(argv[i+1]);
continue;
}
if (!strcmp(argv[i], "-p")) {
pid = atoi(argv[i+1]);
continue;
}
}/*利用sigqueue给pid发送信号signum,并携带数据value*/
if (sigqueue(pid, signum, value) < 0) {
perror("sigqueue");
exit(1);
}return 0;
}#include
#include/*三参数的信号处理程序*/
void handler_sigint(int signo, siginfo_t *siginfo, void * pvoid)
{
printf("recv SIGINT, the data value is:%sn",(char *) siginfo->si_ptr);
}int main()
{
struct sigaction act;/*赋值act结构*/
act.sa_sigaction = handler_sigint;
act.sa_flags = SA_SIGINFO; // 指定使用三参数的信号处理函数
/*安装信号处理函数*/
sigaction(SIGINT, &act, NULL);while(1)
;return 0;
}