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

发送信号以指针作为数据的问题

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

    本文导语:  /* reader.c */ #include  #include  #include  void handler(int signo,siginfo_t* si,void* context); int main(int argc,char** argv) {     struct sigaction act;     char tem;          act.sa_sigaction=handler;     act.sa_flags=SA_SIGINFO;       ...

/* reader.c */

#include 
#include 
#include 

void handler(int signo,siginfo_t* si,void* context);

int main(int argc,char** argv)
{
    struct sigaction act;
    char tem;
    
    act.sa_sigaction=handler;
    act.sa_flags=SA_SIGINFO;
    
    printf("%dn",getpid());
    
    sigaction(SIGUSR1,&act,NULL);
    tem=getchar();
    printf("%cn",tem);
    
    return 0;
}

void handler(int signo,siginfo_t* si,void* context)
{
    char* str;
    int i;
    int* in;
    
    if(SIGUSR1!=signo)
    {
        return;
    }

    printf("%dn",si->si_value.sival_int);
    in=(int*)si->si_value.sival_int;
    printf("%dn",*in);
}


/* writer.c */

#include 
#include 
#include 

int main(int argc,char** argv)
{
    int id;
    char* str="Hello leaxujia!n";
    int in=10086;
    union sigval val;

    if(2!=argc)
    {
        printf("usage:writer pidn");
        return 1;
    }
    
    id=atoi(argv[1]);

    val.sival_int=(int)∈

    printf("%dn",val.sival_int);
    printf("%dn",*(int*)val.sival_int);
    
    sigqueue(id,SIGUSR1,val);
    
    getchar();
    
    return 0;
}

编译完成后,从一个终端输入:
$ ./reader 
6641
然后从另一个终端输入:
$ ./writer 6641
-1076204440
10086

现在原先的终端接到消息后,输出:
-1076204440
段错误
然后退出了。
现在我就搞不懂,为什么它的指针都原样的发送过去了
但是就是读不对呢?为什么会出现段错误?
是不是一个进程的数据不能接受另一个进程来读啊?
但是要事这样的话,
union sigval中含有一个void* sival_ptr有什么用,这个东西不就是用来发送指针的吗?
不解。
等高手解答。

|
现在我就搞不懂,为什么它的指针都原样的发送过去了 
但是就是读不对呢?为什么会出现段错误? 
是不是一个进程的数据不能接受另一个进程来读啊? 

===================================
对,进程间不能 读其他进程的内存.
要实现你的需求, 可以考虑使用共享内存.

PS: 不是没人回答你的问题,今天是周末.

|
共享内存为什么不行?
共享内存可以被多个进程共享,进程间不需要有什么联系,只要这几个进程是同一台机器上运行。

|
看不懂。那就CD(纯顶一下)

|
这个union sigval 一次只能传一个整数或一个指针,而你认为一次能传两个.

    
 
 

您可能感兴趣的文章:

  • 非进程所有者如何向该进程发送信号
  • 如何向由fork出来的进程家族发送信号?
  • 内核进程间发送信号用哪个函数,如果没有这东西,那内核里异步通知用哪个东西
  • QT为什么发送这个信号,没有进入keyPressEvent()函数呢。。
  • 图形界面中如何发送鼠标事件/信号,来模拟鼠标动作
  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • linux qt 中信号发送和界面设计的问题
  • 信号灯同步2个进程,一个进程如何主动给另一个进程发送通知?
  • 请问怎样发送键盘信号?
  • 请求sigqueue发送SIGUSR1信号的写法
  • Gtk 用户信号发送与接收的问题。
  • 内核发送信号给进程的问题,高手来拿分了
  • 向sourceid提问,还是关于“在定时器到时后,应该发送什么信号让scanf()函数返回?”的
  • kill(0,15) 是给当前进程发送信号,后面的15代表什么意思。?
  • 在定时器到时后,应该发送什么信号让scanf()函数返回?
  • 关于进程间发送信号的问题
  • 请教关于Kill向子进程发送信号的问题,子进程如何相应信号,为什么子进程接受不到。
  • 还是不懂,驱动到底如何能同步的发送信号给用户程序,请教高人,谢谢了
  • 关于进程间发送信号问题
  • 请教信号发送程序遇到的一个问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何自动的将表单作为附件发送出去?
  • HTTP协议发送请求详解
  • 我想让内核向网卡发送数据时,不是立即发送,而是等我允许时再发送
  • TCP发送数据,假如发送套接口是非阻塞的,而要发送的数据大于缓冲区尺寸
  • socket发送端、接收端同一机器,kill掉接收端进程,发送端也被kill?
  • *** 高分, 请问如何发送一个事件, 比如发送一个Tab键? ***
  • 谁知道minicom监控VT100终端时候发送"F1"键是发送的什么转义字符呢?
  • 有没有谁实现了向IE浏览器那种“发送网页(P)”,把完整html格式发送给相应email?
  • 用sendto(socket, buf, strlen(buf), ...)发送一个包,如何得到发送的源地址(也就是本机的源地址)
  • postfix 在内网可以正常接收与发送邮件,但向局外,不能接收与发送
  • 串口应用程序,当对方发送大量的数据时,本方的数据无法发出。对方停止发送,本方的数据仍然无法发出。不知道是什么原因。
  • sendmail,内部发送接收可以,当用外部的域名,无法发送和接收,如163账号。
  • 如何将数据库里边的长度超过65535的数据打包发送发送?
  • 同多个线程通过同一个socket发送数据,操作系统底层会同步每个发送操作吗
  • 求助,udp文件传输发送端发送完了,接收端却接受到一半就bad address?
  • 通过短信发送LOG归类号码发送情况的shell脚本
  • 怎么用sendmail发送纯文本邮件,无论中英文都可显示,但如改用发送html格式的邮件,即message.setContent("Hello,this is content,后面
  • 数据包通过dev_queue_xmit发送出去,dev_queue_xmit返回值为0,但是对方收不到数据包 ,本机也抓不到发送出去的包
  • 请问在netfilter的forward点上怎么将原来从eth0发送的数据包转向由eth1发送啊?
  • 我调用socket向外发送消息,为什么在发送的同时,会打印字符串到屏幕上
  • 怎样编程发送广播包?我的这段程序发送怎么返回值总是-1?
  • 使用perl发送带有附件的电子邮件是什么原理呀?不带附件得我已经发送成功了,希望指点


  • 站内导航:


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

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

    浙ICP备11055608号-3