第6章 System V IPC-【千锋教育】Linux系统编程(慕课版)

2023-03-21
| 40页
| 116人阅读
| 0人下载
教辅

内容正文:

Q干锋教育 第6章System VIPC ·消息队列 ·信号灯 ·共享内存 目录 6.1 消息队列 口点击查看本)小节知识架构 6.2 共享内存 口点击查看本小节知识架构 6.3 信号灯 口点击查看本小节知识架构 学习目标 理解System V 掌握System V通 通信机的 信机制的特点 2 理解 掌握 及应用场合 熟练 掌握 熟练使用Sys 掌握System Vi通 V通信机制实 信机制编程接 3 现功能需求 口的方法 ·第5章介绍了早期进程间通信机制。这些早期通信机制虽然便于操作,但有很大的 局限性,因此本章将介绍功能更加丰富的System V IPC。System V IPC在Linux 系统中占有很重要的位置,包括消息队列、共享内存、信号灯(信号量集)。其 使用接口较复杂,细节较多,读者应熟练掌握。 ⨄知识架构 返回目录 6.1消息队列 6.1.1……………消息队列简介_ 6.1.2……………消息队列编程 6.1.3……………。消息队列实验 6.1消息队列 6.1.1消息队列简介 Liux下的进程通信机制基本是从UNIX平台继承来的。对UNIX发展做出重大 贡献的两大主力AT&T的贝尔实验室及BSD在进程间通信方面的侧重点有所不 同。前者对UX早期的进程间通信手段进行了系统的改进和扩充,形成了 System V IPC,这些都是针对本地通信;后者则跳过该限制,形成了基于套 接字(socket)的进程间通信机制。 本节将介绍消息队列的使用。顾名思义,消息队列就是一些消息的列表,或者 说是一些消息组成的队列。消息队列与管道有些类似,消息队列可以认为是管 道的改进版。相较于管道的先进先出准则,消息队列在读取时可以按照消息的 类型进行读取,这也是消息队列的特点,它可以实现消息随机查询。消息发送 时,需要将消息封装,然后添加到队列的末尾即可;而消息接收时,则可以根 据需求进行选择的读取(读取即将封装的消息从队列中移除)。 6.1消息队列 6.1.1消息队列简介 ·如图所示,进程可以通过消息队列添加消息,同时也可以从消息队列中读取消息, 它不同于无名管道的单向通信,操作更加灵活。 进程A 进程B 消息 消息 消息 消息 #include <sys/types.h> #include <sys/ipc.h> key t ftok(const char *pathname,int proj id); ftok()函数被用来生成一个key值,key值可以被msgget(0函数、shmget0函 数、semget(0函数使用,参数pathname(路径名必须存在且可以自定义) 与proj id的低八位(可以自定义)共同产生一个key值。 6.1消息队列 6.1.1消息队列简介 ·消息队列的实现包括创建或打开消息队列、添加消息、 读取消息和控制消息这四 个操作。 (1)创建或打开队列,创建的消息队列的数量会受到系统消息队列数量的限制。 #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgget(key t key,int msgflg); ·参数ky为消息队列的键值,用来标志多个进程所访问的消息队列是否为同一个队 列。其值可以被设置为IPC PRIVATE或ftok(O函数的返回值。指定key为 IPC PRIVATE,内核保证创建一个新的、唯一的IPC对象,IPC标识符与内存中的 标识符不会冲突。IPC PRIVATE为宏定义,其值等于O。而一般情况下,ky值可 以选择通过ftok(0函数获取。 6.1消息队列 6.1.1消息队列简介 参数msgflg用来设置标志位属性,可以指定IPC CREAT,表示如果消息队列不存 在,则自动创建。也可以指定IPC EXCL,表示如果队列已存在,则返回错误码 EEXIST。同时msgflg必须还要指定权限,这一点与文件的mode权限一样。一般 情况下可以进行如下设置。 int msgget(key,IPC CREATIIPC EXCL10664); 上述设置表示,如果消息队列不存在,则自动创建;如果消息队列存在,则返回 错误码EEXIST,表示文件已存在,不需再创建,此时,函数的功能可以认为是创 建并打开一个消息队列。如果队列已存在,只需打开,则函数参数可以设置如下。 int msgget(key,0664): msgget(0函数返回值为消息队列标识符,用于实现消息队列的发送、接收、控制。 6.1消息队列 6.1.1消息队列简介 (2)发送消息,即将消息添加到已经打开的消息队列的末尾。 #include <sys/types.h> #include <sys/ipc.h> #include <sys/m

资源预览图

第6章 System V IPC-【千锋教育】Linux系统编程(慕课版)
1
第6章 System V IPC-【千锋教育】Linux系统编程(慕课版)
2
第6章 System V IPC-【千锋教育】Linux系统编程(慕课版)
3
第6章 System V IPC-【千锋教育】Linux系统编程(慕课版)
4
第6章 System V IPC-【千锋教育】Linux系统编程(慕课版)
5
第6章 System V IPC-【千锋教育】Linux系统编程(慕课版)
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。