pid c语言实现指针,用sigqueue()函数向另一个进程传递一个指针

博主在尝试通过信号(Signal)传递一个指向字符串的指针时遇到了段错误(Segmentation Fault)。发送端将字符串复制到指针并尝试通过sigqueue发送,而接收端在接收到信号后尝试访问该指针的内容。然而,代码在运行时崩溃,可能是因为指针未正确初始化或内存管理问题。博主寻求解决方案来修复这段C语言代码中的错误。
摘要由CSDN通过智能技术生成

我做了一个发送信号端,一个接收信号端,可以实现向接收端传一个整型数据,但是如果改成指针的好,就提示出现段错误,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值