当前位置: 技术问答>linux和unix
用sigqueue()函数向另一个进程传递一个指针
来源: 互联网 发布时间:2017-03-11
本文导语: 我做了一个发送信号端,一个接收信号端,可以实现向接收端传一个整型数据,但是如果改成指针的好,就提示出现段错误,segementation fault.代码如下: 发送端:#include #include #include #include #include #include #incl...
我做了一个发送信号端,一个接收信号端,可以实现向接收端传一个整型数据,但是如果改成指针的好,就提示出现段错误,segementation fault.代码如下:
发送端:
信号接收端代码:
发送端:
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char**argv)
{
union sigval mysigval;
char * pMsg;
char msg[]="I still believe";
strcpy(pMsg,msg);
mysigval.sival_ptr=pMsg;
// mysigval.sival_int=8;
pid_t pid;
pid=(pid_t)atoi(argv[1]);
if(sigqueue(pid,SIGRTMIN,mysigval)==-1)
printf("send errorn");
sleep(2);
return 1;
}
信号接收端代码:
#include
#include
#include
#include
#include
#include
void new_op(int signum,siginfo_t *info,void *myact)
{
printf("receive signal %d", signum);
// char *msg=(char*)info->si_value.sival_ptr;
// printf(" receive infomation is:%sn",msg);
int msg=info->si_value.sival_int;
printf("receive information is %d",msg);
sleep(5);
}
int main()
{
pid_t pid;
pid=getpid();
printf("my pid is %d",pid);
struct sigaction act;
sigemptyset(&act.sa_mask);
act.sa_flags=SA_SIGINFO;
act.sa_sigaction=new_op;
int result;
result=sigaction(SIGRTMIN,&act,NULL);
if(result