实验十八-linux进程间通信

实验十八-linux进程间通信

ID:46329713

大小:1.58 MB

页数:15页

时间:2019-11-22

实验十八-linux进程间通信_第1页
实验十八-linux进程间通信_第2页
实验十八-linux进程间通信_第3页
实验十八-linux进程间通信_第4页
实验十八-linux进程间通信_第5页
资源描述:

《实验十八-linux进程间通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

2、共享内存,shmat(),把这段创建的共享内存映射到具体的进程空间中。到这里可使用共享内存了,也就是可以使用不带缓冲的I/O读写命令对其进行操作。除此之外,当然还有断开映射的操作,shmdt()。共享内存共享内存共享内存消息队列消息队列就是一些消息的列表。用户可以从消息队列中添加消息和读取消息等。从这点上看,消息队列具有一定的FIFO特性,但是它可以实现消息的随机查询,比FIFO具有更大的优势。同时,这些消息又是存在于内核中的,由“队列ID”来标识。消息的结构。受到两方面约束,长度必须小于系统规定上限,其次,它必须以一个长整型变量

3、开始,接受函数将用这个成员变量来确定消息类型structmy_message{longmessage_type;/*data*/}消息队列消息队列的实现包括四种操作:创建或打开消息队列:msgget(),数量会受到系统消息队列数量的限制。添加消息:msgsnd(),把消息添加到已打开的消息队列末尾;读取消息:msgrcv(),把消息从消息队列中取走,与FIFO不同的是,这里可以指定取走某一条消息;控制消息队列:msgctl(),可以完成多项功能。消息队列消息队列消息队列消息队列消息队列编写一对程序shm1.c和shm2.c,第一个

4、程序创建一个共享内存段,并把写到里面的数据都读出来,直到读到“end”。第二个程序连接已有的共享内存段,并负责向里输入数据,直到输入“end”(需要自己提供同步机制)。编写一对程序msg1.c和msg2.c,前者负责接收消息,后者负责发送消息,允许两个进程都可以创建消息队列,但只有接收进程可以删除队列,规定当接收或发送数据为“end”时结束。作业

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。