要在不同的进程之间共享一个数组,怎么办?用文件好慢。
用管道的话,管道会阻塞的。
用共享内存好些。
在UNP2里面其实都给出了使用例子了。只是我没有UNP2罢了……只能看PDF去了。
用到的函数有
shmget 申请一个共享内存,得到一个id号,需要提供一个key_t。
shmctl 控制共享内存的行为,获取它的结构啊,或者把它干掉等等。
shmat 把共享内存连接到地址上去,一种映射。
shmdt 木有用到……
那么两个进程之间怎么能都知道这个共享内存的入口地址呢,需要我们使用相同的key_t值。是个字符串。
这个key呢 可以用ftok()函数来获得。
ftok需要提供一个文件路径,比如/dev/zero之类的,存在的就好。
相同的字符串导致获得相同的shmid
然后映射就能得到相同的指针来指向这段共享内存了。
一个进程写点东西进去,另一个进程就可以读出来。
主要使用的是一个指针,理解成数组的地址就可以了,一个ptr什么的。对它的操作一般就是一个memcpy。
读写的时候需要我们控制好这个各种大小。写入的量,写出的量,有木有满啊 之类的。
目前只是实现了这个多个进程之间的共享数据,能读能写,还没有有效的控制起来。
UNP2啊,伤不起啊。淡定的开始编码……TOT