实验十八--linux进程间通信

上传人:宝路 文档编号:48239900 上传时间:2018-07-12 格式:PPT 页数:15 大小:1.58MB
返回 下载 相关 举报
实验十八--linux进程间通信_第1页
第1页 / 共15页
实验十八--linux进程间通信_第2页
第2页 / 共15页
实验十八--linux进程间通信_第3页
第3页 / 共15页
实验十八--linux进程间通信_第4页
第4页 / 共15页
实验十八--linux进程间通信_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《实验十八--linux进程间通信》由会员分享,可在线阅读,更多相关《实验十八--linux进程间通信(15页珍藏版)》请在金锄头文库上搜索。

1、实验十九共享内存(Shared memory)消息队列(Messge Queue)共享内存是一种最为高效的进程间通信方式。因为进程可 以直接读写内存,不需要任何数据的拷贝。为了在多个进程间交换信息,内核专门留出了一块内存区 。这段内存区可以由需要访问的进程将其映射到自己的私 有地址空间,从而大大提高了效率。由于多个进程共享一段内存,因此也需要依靠某种同步机 制,如互斥锁和信号量等 。共享内存的实现分为两个步骤:第一步是创建共享内存,shmget(),从内存中获得 一段共享内存区域。第二步是映射共享内存,shmat(),把这段创建的 共享内存映射到具体的进程空间中。到这里可使用共享内存了,也就是

2、可以使用不带缓 冲的I/O读写命令对其进行操作。除此之外,当然还有断开映射的操作,shmdt()。 消息队列就是一些消息的列表。用户可以从消息队列中 添加消息和读取消息等。从这点上看,消息队列具有一定的FIFO特性,但是它可以实现消息的随机查询,比 FIFO具有更大的优势。同时,这些消息又是存在于内核 中的,由“队列ID”来标识。消息的结构。受到两方面约束,长度必须小于系统规定 上限,其次,它必须以一个长整型变量开始,接受函数 将用这个成员变量来确定消息类型struct my_message long message_type; /*data*/ 消息队列的实现包括四种操作:创建或打开消息队列

3、: msgget(),数量会受到系统消 息队列数量的限制。添加消息: msgsnd(),把消息添加到已打开的消息队 列末尾;读取消息: msgrcv(),把消息从消息队列中取走,与 FIFO不同的是,这里可以指定取走某一条消息;控制消息队列: msgctl(),可以完成多项功能。 编写一对程序shm1.c和shm2.c,第一个程序创建 一个共享内存段,并把写到里面的数据都读出来, 直到读到“end”。第二个程序连接已有的共享内存 段,并负责向里输入数据,直到输入“end”(需要 自己提供同步机制)。编写一对程序msg1.c和msg2.c,前者负责接收消 息,后者负责发送消息,允许两个进程都可以创建 消息队列,但只有接收进程可以删除队列,规定当 接收或发送数据为“end”时结束。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号