返回信息流请问可不可以实现两个C程序访问同一个变量,一个程序改变变量后,另一个程序可以访问改变后的变量?如何实现? 这里是两个程序,两个主函数。 谢谢
这是一条镜像帖。来源:北邮人论坛 / cpp / #47503同步于 2010/12/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求助一个多个c程序同时运行的问题
gbsh
2010/12/9镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 kobe6672823 的大作中提到: 】
: 用文件实现?
: 你要改变的那个变量改变后放到文件里,然后另外一个文件访问那个文件就行了,可是这个方法的同步互斥是个问题,还是用进程好弄点吧
: --
: ...................
你好,问下用进程怎么弄?能不能加你QQ?
共享内存
【 在 gbsh (gbsh) 的大作中提到: 】
: 请问可不可以实现两个C程序访问同一个变量,一个程序改变变量后,另一个程序可以访问改变后的变量?如何实现? 这里是两个程序,两个主函数。 谢谢
我试着采用的方法是用mmap函数映射同一个普通文件实现共享内存。
我创建一个结构体如下:
struct ctl_array{
struct switch_ switches[MAX_SWITCHES];
int n_switches;
};
在第一个进程中,先打开普通文件,然后用mmap函数映射到这个进程的一个地址空间,令函数返回ctl_array类型指针p_map(想在共享内存中保存一个ctl_array对象),通过操作这个指针将一个ctl_array对象保存到共享内存中。
通过查看p_map->n_switches和p_map->switches[]数组知道已经保存成功。
启动第二个程序,同样打开同一个普通文件,然后用mmap函数映射到这个进程的地址空间,令函数返回ctl_array类型指针p_map,操作这个指针查看p_map->n_switches是正确的,但是在试图操作p_map->switches[]数组中的元素时,出现段错误的问题。本来刚开始在第一个进程中写共享内存时出现段错误和总线错误,但都解决了,为什么第二个进程直接读共享内存会出现段错误呢??望牛人回复。
【 在 gbsh 的大作中提到: 】
: 我试着采用的方法是用mmap函数映射同一个普通文件实现共享内存。
: 我创建一个结构体如下:
: struct ctl_array{
: ...................
pipe,memory-mapped file什么的多好用啊,干吗非要自己写
【 在 wks 的大作中提到: 】
: 弱弱地问问,那为什么设计成两个程序而不是一个程序呢?为什么不是三个程序呢?
: --
当时感觉写在一个程序里面不太好实现想要的功能,所以弄了两个(原来也是两个进程,只是没有进程间的通信,我想修改)。
我现在考虑这个段错误的原因是共享内存中的结构体中有定义指针,第一个进程给指针赋值为第一个进程的虚拟地址空间,而这个地址在第二个进程中是不能用的,所以当操作这个指针时就出现了段错误。所以我想确认下,是不是共享内存不能共享指针?如果是的话,只能放弃让这两个进程通信的想法了。