通过编写本实验程序,熟练掌握共享内存,消息队列相关函数的操作。
(1) 编译运行教科书上
P266示例程序
思考题:
1)编译运行源代码,说明该程序的功能.
2)执行n 次,看程序的执行结果.
3)是否可直接在终端系统提示符下运行ipcs命令?试执行之。
4)说明P266示例程序运行结果中的nattch值是如何变化的,其变化说明了什么?
5)该怎么删除nattch值为0的共享内存?
P270示例程序
思考题:
1)编译运行源代码,说明该程序的功能.
自出题:
通过查找资料实现两个进程通过消息队列实现进程通信.
P275示例程序
思考题:
1)编译运行源代码,说明该程序的功能.
2)程序有没有错误?执行结果是什么?如果存在问题,该怎么修改?
自出l题:
通过查找资料实现两个进程利用共享内存实现进程通信.
注意点
1. nattch 值为 共享内存 创建之后的引用值,0表示没有被引用,大于零代表有被引用
2. shmdt 和 shmctl 的区别
shmdt(addr)使进程中的shmid无效化,不可以使用。但是保留空间。
shmctl(shmid,IPC_RAID,0) 删除共享内存,彻底不可用,释放空间。
注意这里的shmctal 的原型是 int shmctl( int shm_id, int cmd, struct shmid_ds *buf );
只有当shmid_ds 中的 shm_nattch 域为零时,才会真正执行删除命令,否则不会删除该段。
3. 建立ipc 通信的时候产生ID值 使用ftok 函数
http://blog.csdn.net/hwz119/archive/2007/05/17/1613601.aspx 这里有一个关于 ftok 函数的
参考程序答案见 第四课 习题之我解