UNPv2第六章:System V 消息队列

6.1 概述

6.2 msgget函数

用于创建一个新的消息队列或者访问一个已存在的消息队列

#include <sys/msg.h>
int msgget(key_t key, int oflag)
    返回:成功时为非负标识符,出错时为-1

返回值是一个整数标识符,其他三个msg函数就用它来指代该队列。它是基于指定的key产生的,而key既可以是ftok返回值,也可以是IPC_PRIVATE。 参数oflag可以为以下:IPC_CREAT、IPC_EXCL、IPC_NOWAIT或三者的或结果。

6.3 msgsnd函数

#include <sys/msg.h>
int msgsnd(int msgid, const void *ptr, size_t length, int flag);
功能:往一个已打开的消息队列发送一个消息。
返回:成功时为0, 出错时为-1

ptr是一个结构指针,该结构具有如下的模板:

struct msgbuf{
    long mtype;     /* message type, must be > 0 */
    char mtext[1];      /* message data */
};

消息类型必须大于0,因为对于msgrcv函数来说,非正消息类型用作特殊的指示器。 msgsnd的length参数以字节为单位指定待发送消息的长度 flag参数可以为0,也可以是IPC_NOWAIT。IPC_NOWAIT标志使的msgsnd调用非阻塞(nonblocking).

6.4 msgrcv

#include    <sys/msg.h>
ssize_t msgrcv(int msgid, void *ptr, size_t length, long type, int flag);
功能: 从某个消息队列中读出一个消息
返回:成功时为读入缓冲区中数据的字节数,出错是为-1

6.5 msgctl函数

#include    <sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds *buff);
功能: 提供在一个消息队列上的各种控制操作。
返回: 成功时为0,出错时为-1

该系统调用对由msqid标识的消息队列执行cmd操作,共有三种cmd操作:IPC_STAT、IPC_SET 、IPC_RMID。  IPC_STAT:该命令用来获取消息队列信息,返回的信息存贮在buf指向的msqid结构中;  IPC_SET:该命令用来设置消息队列的属性,要设置的属性存储在buf指向的msqid结构中;可设置属性包括:msg_perm.uid、msg_perm.gid、msg_perm.mode以及msg_qbytes,同时,也影响msg_ctime成员。  IPC_RMID:删除msqid标识的消息队列;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券