V系统贡献原理及其详细介绍请点击这里查看,本文不作详解。http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html
需注意:
1.指定共享文件:如/etc/shm/shmtest 此处shmtest需要自己建立;
2.创建IPC通讯ID值:key=ftok(char * fname,int id),fname就时你指定的文件名,id是子序号,值为1-255之间。
3.shmget获取shm_id:shm_id = shmget(key,4194304,IPC_CREAT);此处需注意:4194304为你所分配的共享内存的大小,单位为Byte,这里分配了4M,这个大小在你第一次分配后,即运行shmget后,没有删除这个shmget之前就不不能增大了,只能改小,如果你在未删除shm_id之前,将此处内存改大,编译会通过,但是在运行时会报错:shmget error: Invalid argument。因而,若需要修改大小(增大内存),最好在shmat后增加一句删除shm_id的语句:shmctl(shm_id,IPC_RMID,0);这样每次都是申请的新的。若你不想删除shm_id而又想扩大共享内存的话,可以修改ftok中的id参数,这样会得到不同的key,也相当于重新申请了一个shm_id,而原来的shm_id会一直存在直到reboot。
4.读写操作中ftok对同一指定文件须使用相同的id,这样所得到的key才是相同的,不然会出现如下错误:shmget error: Invalid argument。