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

求高手改错 关于进程通信的

    来源: 互联网  发布时间:2016-10-30

    本文导语:  求高手改错;为什么结果不能输出预想的 get  I love you forever #include #include #include #include #include #define SHMKEY 75 int shmid ,i; char *addr; char *argv[]={"I LOVE YOU FOREVER"}; void B() {     shmid=shmget(SHMKEY,5112,0777);     ...

求高手改错;为什么结果不能输出预想的 get  I love you forever

#include
#include
#include
#include
#include

#define SHMKEY 75

int shmid ,i;
char *addr;
char *argv[]={"I LOVE YOU FOREVER"};


void B()
{
    shmid=shmget(SHMKEY,5112,0777);
    addr=shmat(shmid,0,0);
    memset(addr,'',512);
    //printf("1 %s",*argv);
    strncpy(addr,argv[0],512);
    exit(0);
    }
void A()
{
    shmid=shmget(SHMKEY,512,0777|IPC_CREAT);
    addr=shmat(shmid,0,0);
    printf("get %sn",addr);
    exit(0);
    }


main()
{
    while((i=fork())==-1);
    if(!i)A();
    while((i=fork())==-1);
    if(!i)B();
    wait(0);
    wait(0);
    }

|
你这个依赖于两个进程的执行顺序吧
如果在B放入数据之前,A就执行完了,当然没有显示了

建议在fork()之前,由主进程创建共享内存段,并shmat()
然后fork()的两个进程直接用这个地址就行了

|
void B()
{
  
  addr=shmat(shmid,0,0);
  memset(addr,'',512);
  //printf("1 %s",*argv);
  strncpy(addr,argv[0],512);
  exit(0);
  }
这个函数改一下,shmid=shmget(SHMKEY,512,0777);把5112改成512
最好再各个函数里加点延时,

|
#include
#include
#include
#include
#include
#include 

#define SHMKEY 75

int shmid ,i;
char *addr;
char *argv={"I LOVE YOU FOREVER"};


void B()
{
  shmid=shmget(SHMKEY,512,0777);
  addr=shmat(shmid,0,0);
  memset(addr,'',512);
  //printf("1 %s",argv);
  strcpy(addr,argv);
  //printf("%s",addr);
  exit(0);
  }
void A()
{
  shmid=shmget(SHMKEY,512,0777|IPC_CREAT);
  addr=shmat(shmid,0,0);
  printf("get %sn",addr);
  exit(0);
  }


main()
{
  while((i=fork())==-1);
  if(!i)A();
  wait(0);
  while((i=fork())==-1);
  if(!i)B();
  wait(0);
  }

    
 
 

您可能感兴趣的文章:

  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • 请教--父进程监控子进程,欢迎高手进来探讨!!!
  • 高手指点:不用JNI,如何在Java进程中新起一个JVM并在其中启动另一个Java进程。
  • 关于杀死进程(高手请进)
  • Linux创建进程的问题,请高手帮忙解答一下?
  • 父子进程问题,高手请进!!!
  • linux内核高手进!关于调用__fork()时0号进程的子进程才能与父进程共享PID的困惑
  • 多进程通讯问题,请高手们给点思路吧
  • 请各位高手谈谈是如何管理自己的进程池的?
  • linux进程异步通信,高手请进
  • 哪一位高手能提供关于进程池的完整的概念?30分奉送!!
  • 请教高手:Unix下如何实现进程池?
  • 请问高手LInux 下的进程、线程的切换具体是如何实现的?
  • 求高手指点进程监控问题
  • 关于子进程中释放内存的问题!!?高手请进
  • Linux下多进程实现异步编成,高手帮忙!
  • 高手请进,如何完备的获得进程间父子关系,谢谢!
  • 高手请指点,怎么创建一个不会死的进程
  • 请教高手:C语言怎么知道一个进程是否存在(Linux下)
  • 请各位高手谈谈进程池。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux驱动程序是怎样通过内核和应用程序通信,还有是怎样和硬件通信,跪求求解,谢谢高手留言。
  • 请教网络通信高手~~~~
  • 关于socket通信,C的代码,有个问题请教高手!
  • 请高手指教-[急!!!]怎样在linux与 window 之间,通过 C或Java 进行通信
  • linux 里有哪些内核与用户进程的通信方法? 请高手指点一下!谢谢!
  • Linux串口通信问题,高手请指点!!!
  • 奇怪的串口通信问题,请高手指教
  • 还是关于applet和servlet通信的问题!高手看过来!
  • 深入了解Linux系统TCP通信的高手请帮帮忙:Linux通信问题.分不够再加
  • 新手,求助高手指点SUSE linux双网卡问题,内外网,不同网段通信问题
  • #####################很急!!!!!请高手们都来帮帮我!套接字产生的DataOutputStream,在通信时会莫名其妙的被堵死????##########
  • applet和SERVLET通信的问题,请高手赐教!
  • 100分求解,不够在加!进程间通信问题,高手请进!
  • 求教各路高手 jrtplib库在arm与pc机之间通信 组网点播H.264时花屏
  • 一个udp通信程序引发的问题(请这方面的高手能给予帮助!)
  • 高手请帮忙,java如何与mysql通信的问题?
  • 请教各位高手如何在Linux下实现局域网内的通信
  • 请Winsoket高手进来帮Me看看socket通信问题
  • 我在linux下写了一个简单的socket通信程序,希望高手帮我看看,提提意见
  • 不显示删除回复显示所有回复显示星级回复显示得分回复 父子进程间通信:1:共享内存2:信号量:父进程里请求信号量错误,高手帮忙
  • 高手,高手,高高手请进!
  • 有熟悉EXIM的高手高手么??
  • to 高手:学java应该怎样一步步学习,从菜鸟到高手.
  • 高分请高手,高手定能解决
  • 请问高手在linux中用什么命令可以做linux的启动盘???在等待高手??
  • 有高手研究Agent++麽?里面有个thread.h,蛮难读的,请高手指点
  • 难道高手区里的人就是高手?
  • 网络技术 iis7站长之家
  • 真正的linux高手,请看过来,看你符合高手标准不?
  • 难道这没有高手吗?难道这没有乐于助人的高手?(高分酬谢62+50+50)
  • 关于我对linux高手用yum,非高手用源码的理由


  • 站内导航:


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

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

    浙ICP备11055608号-3