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实现的方法。

posted @ 2012-05-07 10:05  timest  阅读(5000)  评论(0编辑  收藏  举报