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标识的消息队列;