消息队列与通信

来源:互联网 发布:温州公务员网络学堂 编辑:程序博客网 时间:2024/05/17 22:15
1.打开或创建消息队列
int msgget(key_t key,int msgflg)
成功:返回消息对列
失败:-1

标志: IPC_CREAT创建新的消息队列,没有与key对应的消息队列的情况下才创建

消息队列的格式struct msgbuf
消息的类型    long mtype
消息数据       char mtext[1]

2.发送消息到消息队列中(写消息)
int msgsnd(int msqid,const void *msgp,size_t msgsz,int msgflg)
                    消息队列的id        指向要发送到消息   消息的大小    标志

成功:0
失败:-1

3.从消息队列中取消息(读消息)
msgrcv(int maqid,void *msgp,size_t msgsz,long msgtyp,int msgflg)

消息队列的id  存放取到的消息  希望取到的消息的最大长度  消息的类型【0:直接忽略类型,直接取消息队列的第一条消息    >0:取消息队列类型等于msgtype的第一条消息    <0:取类型比msgtyp的绝对值小的或者等于的消息,在这些消息中取最小的那条】 

成功:接收到的消息的数据量
失败:-1

4.控制消息队列(删除消息队列)
msgctl
int msgctl(int msqid,int cmd,struct msqid_ds *buf)
                消息队列     操作命令      获取内核中的msqid_ds( NULL)

IPC_RMID:用于删除消息队列的标志

成功:0
失败:-1



实例:

进程A:
1.创建消息队列

2.{
        获取键盘输入【消息类型+消息数据】
        发送消息队列
   }

3.进程终止前删除消息队列
0 0
原创粉丝点击