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

62e50291a81fc54b507f33cb80033297.gif 实验十八-linux进程间通信

(15页)

3629ec6c88776422e43d46e2dabb6f01.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

14.90 积分

实验十九? 共享内存(Shared memory)? 消息队列(Messge Queue)? 共享内存是一种最为高效的进程间通信方式。因为进程可 以直接读写内存,不需要任何数据的拷贝。? 为了在多个进程间交换信息,内核专门留出了一块内存区。 这段内存区可以由需要访问的进程将其映射到自己的私有 地址空间,从而大大提高了效率。? 由于多个进程共享一段内存,因此也需要依靠某种同步机 制,如互斥锁和信号量等 。? 共享内存的实现分为两个步骤:? 第一步是创建共享内存,shmget(),从内存中获得 一段共享内存区域。? 第二步是映射共享内存,shmat(),把这段创建的 共享内存映射到具体的进程空间中。? 到这里可使用共享内存了,也就是可以使用不带缓 冲的I/O读写命令对其进行操作。? 除此之外,当然还有断开映射的操作,shmdt()。 ? 消息队列就是一些消息的列表。用户可以从消息队列中 添加消息和读取消息等。从这点上看,消息队列具有一 定的FIFO特性,但是它可以实现消息的随机查询,比 FIFO具有更大的优势。同时,这些消息又是存在于内核 中的,由“队列ID”来标识。? 消息的结构。受到两方面约束,长度必须小于系统规定 上限,其次,它必须以一个长整型变量开始,接受函数 将用这个成员变量来确定消息类型 struct my_message{ long message_type; /*data*/}? 消息队列的实现包括四种操作:? 创建或打开消息队列: msgget(),数量会受到系统消 息队列数量的限制。? 添加消息: msgsnd(),把消息添加到已打开的消息队 列末尾;? 读取消息: msgrcv(),把消息从消息队列中取走,与 FIFO不同的是,这里可以指定取走某一条消息;? 控制消息队列: msgctl(),可以完成多项功能。 ? 编写一对程序shm1.c和shm2.c,第一个程序创建 一个共享内存段,并把写到里面的数据都读出来, 直到读到“end”。第二个程序连接已有的共享内 存段,并负责向里输入数据,直到输入“end” (需要自己提供同步机制)。? 编写一对程序msg1.c和msg2.c,前者负责接收消 息,后者负责发送消息,允许两个进程都可以创建 消息队列,但只有接收进程可以删除队列,规定当 接收或发送数据为“end”时结束。实验十九? 共享内存(Shared memory)? 消息队列(Messge Queue)? 共享内存是一种最为高效的进程间通信方式。因为进程可 以直接读写内存,不需要任何数据的拷贝。? 为了在多个进程间交换信息,内核专门留出了一块内存区。 这段内存区可以由需要访问的进程将其映射到自己的私有 地址空间,从而大大提高了效率。? 由于多个进程共享一段内存,因此也需要依靠某种同步机 制,如互斥锁和信号量等 。? 共享内存的实现分为两个步骤:? 第一步是创建共享内存,shmget(),从内存中获得 一段共享内存区域。? 第二步是映射共享内存,shmat(),把这段创建的 共享内存映射到具体的进程空间中。? 到这里可使用共享内存了,也就是可以使用不带缓 冲的I/O读写命令对其进行操作。? 除此之外,当然还有断开映射的操作,shmdt()。 ? 消息队列就是一些消息的列表。用户可以从消息队列中 添加消息和读取消息等。从这点上看,消息队列具有一 定的FIFO特性,但是它可以实现消息的随机查询,比 FIFO具有更大的优势。同时,这些消息又是存在于内核 中的,由“队列ID”来标识。? 消息的结构。受到两方面约束,长度必须小于系统规定 上限,其次,它必须以一个长整型变量开始,接受函数 将用这个成员变量来确定消息类型 struct my_message{ long message_type; /*data*/}? 消息队列的实现包括四种操作:? 创建或打开消息队列: msgget(),数量会受到系统消 息队列数量的限制。? 添加消息: msgsnd(),把消息添加到已打开的消息队 列末尾;? 读取消息: msgrcv(),把消息从消息队列中取走,与 FIFO不同的是,这里可以指定取走某一条消息;? 控制消息队列: msgctl(),可以完成多项功能。 ? 编写一对程序shm1.c和shm2.c,第一个程序创建 一个共享内存段,并把写到里面的数据都读出来, 直到读到“end”。第二个程序连接已有的共享内 存段,并负责向里输入数据,直到输入“end” (需要自己提供同步机制)。? 编写一对程序msg1.c和msg2.c,前者负责接收消 息,后者负责发送消息,允许两个进程都可以创建 消息队列,但只有接收进程可以删除队列,规定当 接收或发送数据为“end”时结束。实验十九? 共享内存(Shared memory)? 消息队列(Messge Queue)? 共享内存是一种最为高效的进程间通信方式。因为进程可 以直接读写内存,不需要任何数据的拷贝。? 为了在多个进程间交换信息,内核专门留出了一块内存区。 这段内存区可以由需要访问的进程将其映射到自己的私有 地址空间,从而大大提高了效率。? 由于多个进程共享一段内存,因此也需要依靠某种同步机 制,如互斥锁和信号量等 。? 共享内存的实现分为两个步骤:? 第一步是创建共享内存,shmget(),从内存中获得 一段共享内存区域。? 第二步是映射共享内存,shmat(),把这段创建的 共享内存映射到具体的进程空间中。? 到这里可使用共享内存了,也就是可以使用不带缓 冲的I/O读写命令对其进行操作。? 除此之外,当然还有断开映射的操作,shmdt()。 ? 消息队列就是一些消息的列表。用户可以从消息队列中 添加消息和读取消息等。从这点上看,消息队列具有一 定的FIFO特性,但是它可以实现消息的随机查询,比 FIFO具有更大的优势。同时,这些消息又是存在于内核 中的,由“队列ID”来标识。? 消息的结构。受到两方面约束,长度必须小于系统规定 上限,其次,它必须以一个长整型变量开始,接受函数 将用这个成员变量来确定消息类型 struct my_message{ long message_type; /*data*/}? 消息队列的实现包括四种操作:? 创建或打开消息队列: msgget(),数量会受到系统消 息队列数量的限制。? 添加消息: msgsnd(),把消息添加到已打开的消息队 列末尾;? 读取消息: msgrcv(),把消息从消息队列中取走,与 FIFO不同的是,这里可以指定取走某一条消息;? 控制消息队列: msgctl(),可以完成多项功能。 ? 编写一对程序shm1.c和shm2.c,第一个程序创建 一个共享内存段,并把写到里面的数据都读出来, 直到读到“end”。第二个程序连接已有的共享内 存段,并负责向里输入数据,直到输入“end” (需要自己提供同步机制)。? 编写一对程序msg1.c和msg2.c,前者负责接收消 息,后者负责发送消息,允许两个进程都可以创建 消息队列,但只有接收进程可以删除队列,规定当 接收或发送数据为“end”时结束。实验十九? 共享内存(Shared memory)? 消息队列(Messge Queue)? 共享内存是一种最为高效的进程间通信方式。因为进程可 以直接读写内存,不需要任何数据的拷贝。? 为了在多个进程间交换信息,内核专门留出了一块内存区。 这段内存区可以由需要访问的进程将其映射到自己的私有 地址空间,从而大大提高了效率。? 由于多个进程共享一段内存,因此也需要依靠某种同步机 制,如互斥锁和信号量等 。? 共享内存的实现分为两个步骤:? 第一步是创建共享内存,shmget(),从内存中获得 一段共享内存区域。? 第二步是映射共享内存,shmat(),把这段创建的 共享内存映射到具体的进程空间中。? 到这里可使用共享内存了,也就是可以使用不带缓 冲的I/O读写命令对其进行操作。? 除此之外,当然还有断开映射的操作,shmdt()。 ? 消息队列就是一些消息的列表。用户可以从消息队列中 添加消息和读取消息等。从这点上看,消息队列具有一 定的FIFO特性,但是它可以实现消息的随机查询,比 FIFO具有更大的优势。同时,这些消息又是存在于内核 中的,由“队列ID”来标识。? 消息的结构。受到两方面约束,长度必须小于系统规定 上限,其次,它必须以一个长整型变量开始,接受函数 将用这个成员变量来确定消息类型 struct my_message{ long message_type; /*data*/}? 消息队列的实现包括四种操作:? 创建或打开消息队列: msgget(),数量会受到系统消 息队列数量的限制。? 添加消息: msgsnd(),把消息添加到已打开的消息队 列末尾;? 读取消息: msgrcv(),把消息从消息队列中取走,与 FIFO不同的是,这里可以指定取走某一条消息;? 控制消息队列: msgctl(),可以完成多项功能。 ? 编写一对程序shm1.c和shm2.c,第一个程序创建 一个共享内存段,并把写到里面的数据都读出来, 直到读到“end”。第二个程序连接已有的共享内 存段,并负责向里输入数据,直到输入“end” (需要自己提供同步机制)。? 编写一对程序msg1.c和msg2.c,前者负责接收消 息,后者负责发送消息,允许两个进程都可以创建 消息队列,但只有接收进程可以删除队列,规定当 接收或发送数据为“end”时结束。实验十九? 共享内存(Shared memory)? 消息队列(Messge Queue)? 共享内存是一种最为高效的进程间通信方式。因为进程可 以直接读写内存,不需要任何数据的拷贝。? 为了在多个进程间交换信息,内核专门留出了一块内存区。 这段内存区可以由需要访问的进程将其映射到自己的私有 地址空间,从而大大提高了效率。? 由于多个进程共享一段内存,因此也需要依靠某种同步机 制,如互斥锁和信号量等 。? 共享内存的实现分为两个步骤:? 第一步是创建共享内存,shmget(),从内存中获得 一段共享内存区域。? 第二步是映射共享内存,shmat(),把这段创建的 共享内存映射到具体的进程空间中。? 到这里可使用共享内存了,也就是可以使用不带缓 冲的I/O读写命令对其进行操作。? 除此之外,当然还有断开映射的操作,shmdt()。 ? 消息队列就是一些消息的列表。用户可以从消息队列中 添加消息和读取消息等。从这点上看,消息队列具有一 定的FIFO特性,但是它可以实现消息的随机查询,比 FIFO具有更大的优势。同时,这些消息又是存在于内核 中的,由“队列ID”来标识。? 消息的结构。受到两方面约束,长度必须小于系统规定 上限,其次,它必须以一个长整型变量开始,接受函数 将用这个成员变量来确定消息类型 关 键 词: 实验十八-linux进程间通信 ppt、pptx格式 免费阅读 下载 天天文库

524d6daf746efaa52c3c71bbfe7ba172.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值