Linux操作系统之消息队列

#include<sys/msg.h>
消息队列就是由内核负责管理的一个管道,可以按顺序发送消息包(消息包由消息类型、消息长度、消息内容组成),可以全双工工作。可以不按消息的顺序接收消息。
int msgget(key_t key,int msgflg);
功能:创建/获取消息队列
key:IPC键值,由ftok函数自动生成
msg_flag:
0 获取消息队列
IPC_CREAT 创建消息队列
IPC_EXCL 如果存在则创建失败
返回值:消息队列标识

	 int msgsnd(int msqid,const void *msgp,size_t msgsz,int msgflg);
	 功能:向消息队列发送信息
	 msqid:消息队列标识,msgget函数的返回值
	 msqp:结构指针
	      struct msgbuf{
			  long mtype;    //消息类型
			  char mtext[n]; //消息内容
		  };
     msgflg:
	      0 阻塞,当消息队列满时,等待
		  1 不阻塞,当消息队列满时,不等待
		 
	返回值:成功发送返回0,失败返回-1  
    msgsz:消息的长度,不包括消息类型,sizeof(msgbuf)-4  //4是消息类型
	
	
	ssize_t msgrcv(int msqid,void *msgp,size_t msgsz,long msgtyp,int msgflg);
	功能:从消息队列中按类型接收信息
	msqid:消息队列标识,msgget函数的返回值
	msqp:结构指针
	      struct msgbuf{
			  long mtype;    //消息类型
			  char mtext[n]; //消息内容
		  };
    msgsz:要接受一消息的长度
	msgtyp:要接受的消息类型
	    0 接收任一类型的消息(接收队列中第一个消息)
		>0 只接收msgtyp类型的消息
		<0 接受消息队列中小于等于msgtyp绝对值的消息,取最小的那一个
		 
	msgflg:
	      0 阻塞,当消息队列中是否有对应类型的消息,没有则等待
		  1 不阻塞,当消息队列中没有对应类型的信息,则返回
		  ------------------------------------
		  MSG_NOERROR:
		        消息类型正确,而当消息的实际长度大于msgsz,则不接收消息返回-1
				如果msgflg带MSG_NOERROR,则把多余的消息截取,成功接收
		  IPC_NOWAIT:如果消息队列没有要接收的消息,则不等待,返回-1
		  MSG_EXCEPT:接收消息队列中第一个消息类型中不是msgtyp的消息                 编译时添加 -D_GNU_SOURCE
	返回值:成功接收到消息的字节数
	
	int msgctl(int msqid,int cmd,struct msqid_ds *buf)
	功能:删除消息队列,设置或获取消息队列属性
	msqid:消息队列标识,msgget函数的返回值
	cmd: IPC_STAT   获取消息队列的属性
		  IPC_SET    设置消息队列的属性
		  IPC_RMID   删除消息队列
    返回值:成功返回0,失败返回-1
	
	struct msqid_ds {
           struct ipc_perm msg_perm;     /* 权限 */
           time_t          msg_stime;    /* 最后一条消息的发送时间 */
           time_t          msg_rtime;    /* 最后一条消息接收时间*/
           time_t          msg_ctime;    /* 最后一次修改时间 */
           unsigned long   __msg_cbytes; /* 消息队列中的字节数 */
           msgqnum_t       msg_qnum;     /* 消息队列中消息的个数 */
           msglen_t        msg_qbytes;   /* 消息队列中容纳的最大字节数*/
           pid_t           msg_lspid;    /* 最后一次发送消息的进程*/
           pid_t           msg_lrpid;    /* 最后一次接收消息的进程 */
       };
	 
	struct ipc_perm{
	       key_t           _key    //IPC键盘
	       uid_t           uid;    //有效用户ID
	       gid_t           gid;    //有效组ID
	       uid_t           cuid;   //创建者的用户ID
	       gid_t           cgid;   //创建组的组ID
	       unsigned short mode;    //权限 
	       unsigned short _seq;    //IPC标识 
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值