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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值