Linux 进程间数据共享 的三种方法


在CSDN上,有个朋友提了这么一个问题,大概意思是:他在进程里fork出一个子进程,然后发信号同时附加信息给子进程,子进程收到信号后把收到的信息打印出来,同时发一个信号和信息给父进程。结果打印的时候打印出空值。

 

   问题所在是因为,Linux子进程虽然是父进程创建的,但它们之间的数据存放的地址空间是相互独立的。在父进程中给全局变量赋值后子进程中依然为空值。只有线程才共享资源。

   (一)解决方法我也在帖子中给出了,我用的是mmap来实现数据的共享。

   (二)当然也可以用POSIX定义的sigqueue函数,它允许进程发送带附加信息的信号。

  

typedefstruct{

       charps[100]; //父进程想发给子进程的信息

        charcs[100]; //子进程想发给父进程的消息

}SharedData;

SharedData*share_map;

share_map=(SharedData*)mmap(NULL,sizeof(SharedData),PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS,-1,0);

 

   (三)后来我在IBM developerWorks上找到了一个用SystemV实现内存共享的方法,这种方法效率很高而且也很简单。在帖子后面,我也给出了SystemV实现的方法。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM