当前位置: 技术问答>linux和unix
关于共享内存的使用,急~~~~~~~~~~~~~~~~~~~~~~
来源: 互联网 发布时间:2015-06-23
本文导语: 我的程序当输入参数start时,开始运行,输入参数stop时,则停止先前的运行! 如: test start //程序开始运行 test stop //程序停止运行 为了达到这个目的,我决定使用共享内存进行进程间通信: #define SHMDATASIZE 200 int shm...
我的程序当输入参数start时,开始运行,输入参数stop时,则停止先前的运行!
如: test start //程序开始运行
test stop //程序停止运行
为了达到这个目的,我决定使用共享内存进行进程间通信:
#define SHMDATASIZE 200
int shmid = shmget(IPC_PRIVATE, SHMDATASIZE, IPC_CREAT);
这样会申请到一个共享内存,但是stop进程仍然无法知道该共享内存号(我不想让用户来完成这个工作),所以采用一个不是很好的方法,也就是指定一个共享内存号供两个进程使用,
#define SHMID ..........
int shmid = shmget(SHMID, SHMDATASIZE, IPC_CREAT);
可程序返回的shmid 为何与我指定的SHMID不相同,是不是我的用法有问题?请指教!
另外不知道有没有更好的办法(不打算使用临时文件),毕竟指定个具体共享内存号有产生冲突的可能,请高手帮忙!
如: test start //程序开始运行
test stop //程序停止运行
为了达到这个目的,我决定使用共享内存进行进程间通信:
#define SHMDATASIZE 200
int shmid = shmget(IPC_PRIVATE, SHMDATASIZE, IPC_CREAT);
这样会申请到一个共享内存,但是stop进程仍然无法知道该共享内存号(我不想让用户来完成这个工作),所以采用一个不是很好的方法,也就是指定一个共享内存号供两个进程使用,
#define SHMID ..........
int shmid = shmget(SHMID, SHMDATASIZE, IPC_CREAT);
可程序返回的shmid 为何与我指定的SHMID不相同,是不是我的用法有问题?请指教!
另外不知道有没有更好的办法(不打算使用临时文件),毕竟指定个具体共享内存号有产生冲突的可能,请高手帮忙!
|
SHMID应该是个key,而shmget返回的才是id,这两个值就是不一样
|
In both applications, define:
#define SHMKEY 3200 //or any other value
then, open the shared memory by system call:
int shmid = shmget(SHMID, SHMDATASIZE, IPC_CREAT);
The key point is that you use same SHMKEY in both application to access the same shared memory.
#define SHMKEY 3200 //or any other value
then, open the shared memory by system call:
int shmid = shmget(SHMID, SHMDATASIZE, IPC_CREAT);
The key point is that you use same SHMKEY in both application to access the same shared memory.