IPC进程间通信(三)--消息队列

目录

消息队列

消息队列提供了从一个进程向另一个进程发送一个又类型数据块的方法。用这种方法可以避免命令管道的同步和阻塞问题。此外消息队列是基于消息的,而管道是基于字节流的,并且消息队列的读取不一定是先入先出。

//创建消息队列
int msgget(key_t key, int msgflg); //失败返回-1;成功返回msqid
//key:ftok生成或为IPC_PRIVATE
//misfig:IPC_CREAT, IPC_EXECL
//删除消息队列
int msgctl(int msqid, int cmd, struct msqid_ds *buf)
//cmd: IPC_STAT(取出系统保存的消息队列的msqid_ds 数据,并将其存入参数buf 指向的msqid_ds 结构中) IPC_SET(设定消息队列的msqid_ds 数据中的msg_perm 成员。设定的值由buf 指向的msqid_ds结构给出) IPC_EMID(将队列从系统内核中删除)
//返回值: 0-成功;-1-失败
//发送与读取消息
int msgsnd(int msqid, const void *msgp, size_t msgz, int msgflg);//0-成功;-1-失败
ssize_t msdgrcv(int msqid, void *msgp, size_t msgz, int msgflg);//返回读取到的字节数-成功;-1-失败
//msgp: 指向一个缓冲区的指针,用来暂时存放储存发送和接受的消息,是一个用户可以定义的通用结构:
/*struct msgstru{
	long mtype;//大于0
	char mtext;//用户指定大小
};*/
//msgz:消息的大小
//msgtyp:从消息队列中读取的消息形态
//magflg:用来指明核心程序在队列没有数据的情况下所应采取的行动。如果msgflg和常 数IPC_NOWAIT合用,则在msgsnd()执行时若是消息队列已满,则msgsnd()将不会阻塞,而 会立即返回-1,如果执⾏行的是msgrcv(),则在消息队列呈空时,不做等待马上返回-1,并设定 错误码为ENOMSG。当msgflg为0时,msgsnd()及msgrcv()在队列呈满或呈空的情形时,采取 阻塞等待的处理模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值