第4章进程间通信3内容摘要:

进程存储空间; ⑵ . 释放消息缓冲区 msgbuf; 2020/11/4 操作系统与实验 第 4章 2 10 Linux消息缓冲通信的系统调用 共提供了 4个系统调用 msgget() Msgsnd() msgrcv() Msgctl() 所用头函数: include sys/ include linux/ 2020/11/4 操作系统与实验 第 4章 2 11 Linux消息缓冲通信的系统调用 1. 创建一个消息队列或获取已存在消息队列的标识 格式: int msgget ( key_t key, int msgflag ); 功能: 创建标识为 key值的消息队列或者获取已存在的消息队列的描述符 msgid。 参数说明: msgqid—— 该系统调用返回的消息队列描述符 , 1表示失败; key—— 用户指定的消息队列标识符 , 为一正整数 , 其值可以由用户指定 , 如果使用IPC_PRIVATE则由系统产生 key值; flag—— 用户设置的标志或访问方式 , 其值由操作权限和控制命令进行或运算得到。 返回: 正确返回该消息队列的描述符 msgid; 错误返回- 1。 通常使用语句: msgid = msgget(Key, 0666|IPC_CREAT)。 2020/11/4 操作系统与实验 第 4章 2 12 2. 发送一条消息到指定的消息队列 格式: int msgsnd( int msgid, struct msgbuf*msgp, int size, int flag ); 功能: 发送一个消息给指定描述符的消息队列。 将 msgp所指向的 msgbuf中的消息复制到消息数据结构并挂到指定消息队列尾 , 唤醒等待消息的进程。 参数说明: msgid—— 执行 msgget()返回的消息队列的描述符; msgp—— 指向用户存储区的一个消息缓冲 msgbuf的指针 , 在 msgbuf中包含消息类型和消息正文 , 其结构参见 节 size—— 由 msgp指向的数据结构中字符数组的长度 ( 消息长度 ) ; flag —— 规定当核心用尽内部空间时应执行的动作 , 例如:若在 flag中设置了IPC_NOWAIT, 则当消息队列中的字节数超过最大值 msgsnd立即返回 , 否则 msgsnd睡眠。 flag可置 0。 返回: 成功返回 0; 错误返回- 1。 2020/11/4 操作系统与实验 第 4章 2 13 3. 从消息队列接收消息 格式: int msgrcv( int msgid, struct msgbuf*msgp, int size, int type, int flag); 功能: 从指定的消息队列接收一个消息。 将消息复制到 msgp所指的 msgbuf中 , 从消息队列中删除此消息 , 若消息未到则调用进程阻塞插入等待消息队列尾。 参数说明: msgid—— 消息队列描述符; msgp—— 用来存放要接收消息的用户消息缓冲 msgbuf的地址; size —— msgp中数据数组的大小; type—— 用户要读的消息类型: = 0接收队列的第一个消息; > 0接收类型 type的第一个消息; < 0—接收小于或等于 |type|的最低类型的第一个消息。 flag—— 规定若该队列无消息 , 操作系统核心应当做什么 , 可置 0。 返回: 成功返回接收到的数据长度; 错误返回- 1。 2020/11/4 操作系统与实验 第 4章 2 14 4. 对消息队列的操作 格式:。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。