- 论坛徽章:
- 0
|
我做了一个发送信号端,一个接收信号端,可以实现向接收端传一个整型数据,但是如果改成指针的好,就提示出现段错误,segementation fault.代码如下:
发送端:C/C++ code#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
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 error\n");
sleep(2);
return
1;
}
信号接收端代码:
C/C++ code
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <bits/siginfo.h>
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:%s\n",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 <
0)
{
printf("install sigal error\n");
}
while(1)
{
sleep(2);
printf("wait for the signal\n");
}
}
望各位大侠给支个招。 |
|