当前位置: 技术问答>linux和unix
用sigaction & sigqueue 实现进程间通信
来源: 互联网 发布时间:2016-08-02
本文导语: 大家好,我用信号夹带数据的方式实现本机的进程间通信,遇到了如下问题: 1)当发送的数据是数字时,可以正常通信(下面的代码要做一点修改); 2)当发送的数据是字符串时,接收段出现段错误,或者: 3)当...
大家好,我用信号夹带数据的方式实现本机的进程间通信,遇到了如下问题:
1)当发送的数据是数字时,可以正常通信(下面的代码要做一点修改);
2)当发送的数据是字符串时,接收段出现段错误,或者:
3)当我把字符串如"abc"写死在代码里时,接收端可以收到信号,但是打印出来的内容为空。
请大家帮我看看是什么问题,谢谢!
代码如下,
第一段是发送端:
1)当发送的数据是数字时,可以正常通信(下面的代码要做一点修改);
2)当发送的数据是字符串时,接收段出现段错误,或者:
3)当我把字符串如"abc"写死在代码里时,接收端可以收到信号,但是打印出来的内容为空。
请大家帮我看看是什么问题,谢谢!
代码如下,
第一段是发送端:
#include
#include
#include
#include
int main(int argc, char *argv[])
{
union sigval value;
int i = 0;
int flag = 0;
char t[128];
while(i si_value.sival_ptr);
//printf("ok.n");
}
int main()
{
printf("%dn",getpid());
struct sigaction sa;
sa.sa_sigaction = sig_handler;
sa.sa_flags |= SA_SIGINFO;
sigemptyset(&sa.sa_mask);
sigaction(SIGRTMAX-11,&sa,NULL);
while(1)
{
usleep(1);
}
}
|
si_value.sival_ptr指向的地址在两个进程中是不同的。
siginfo_t 的 si_value.sival_ptr 确实可以存放一个指针,但是如果接收信号的进程无法访问发送进程的地址空间,这个指针毫无意义。
siginfo_t 的 si_value.sival_ptr 提供了进程间通过信号传送任意数据的机制,但是要真正实现,需要两个进程能够有共享内存来存放这些数据。
siginfo_t 的 si_value.sival_ptr 确实可以存放一个指针,但是如果接收信号的进程无法访问发送进程的地址空间,这个指针毫无意义。
siginfo_t 的 si_value.sival_ptr 提供了进程间通过信号传送任意数据的机制,但是要真正实现,需要两个进程能够有共享内存来存放这些数据。
|
http://topic.csdn.net/u/20090808/13/0da37f1d-8734-4573-a5f3-c5a7df0a414b.html