当前位置:  技术问答>linux和unix

用sigaction & sigqueue 实现进程间通信

    来源: 互联网  发布时间:2016-08-02

    本文导语:  大家好,我用信号夹带数据的方式实现本机的进程间通信,遇到了如下问题: 1)当发送的数据是数字时,可以正常通信(下面的代码要做一点修改); 2)当发送的数据是字符串时,接收段出现段错误,或者: 3)当...

大家好,我用信号夹带数据的方式实现本机的进程间通信,遇到了如下问题:
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 提供了进程间通过信号传送任意数据的机制,但是要真正实现,需要两个进程能够有共享内存来存放这些数据。

|
http://topic.csdn.net/u/20090808/13/0da37f1d-8734-4573-a5f3-c5a7df0a414b.html

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问,在linux中rt_sigaction和sigaction有什么区别
  • 如何用sigaction( )捕获到任何可以被捕获的信号?
  • signal和sigaction区别
  • signal和sigaction区别 iis7站长之家
  • sigaction这里为什么没有效果,求分析.
  • 调用sigaction却没反应,请帮忙看看!!
  • sigaction函数问题
  • sa_sigaction 如何用第三个参数
  • linux c编程,sigaction函数
  • 信号的"安全和不安全",仅仅是指signal()和sigaction()的区别么?
  • c++中怎么写sigaction()中的信号处理函数
  • 信号可靠还是不可靠,取决与信号本身还是signal()/sigaction()的区别?
  • 问问关于sigfillset 和 sigaction:看如下代码
  • 請教sigaction函數的用法
  • sigaction函數问题
  • sigaction函数的使用 刚开始学,请高手们指教
  • 求助sigaction中sa_mask设置阻塞信号的问题!!!
  • linux sigaction函数,以及输入输出
  • sigaction如何设置信号执行函数时屏蔽和屏蔽本身信号.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3