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