1、msgget函数:创建一个新的消息队列或打开一个已有的消息队列
int magget( (key_t)key , int flag );
返回值:成功返回内核对象的ID值,失败返回-1key:用户标识,如果多个进程想通过同一个消息队列完成数据通信,则每个进程使用相同的key值创建或者获取相同一个消息队列的内核对象ID值。flag:操作标志,IPC_CREAT,如果不存在就创建,存在就获取2、msgctl函数:读写消息队列要求无法满足时不阻塞
int msgctl(int msqid,int cmd,struct msqid_ds *buf);
msqid:消息队列标识符cmd:执行的控制命令,既要执行的操作,IPC_RMID删除消息队列,IPC_STAT获得msqid的消息队列头数据到buf中buf:临时的 msqid_ds 结构体类型的变量。用于存储读取的消息队列属性或需要修改的消息队列属性。
3、msgsnd函数:向消息队列中发送一条消息
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
msgsnd()成功返回0,失败返回-1msqid:消息队列标识父msgp:存放发送给队列的消息的结构 struct msgbuf { long mtype;//消息类型 ,必须大于1 char mtext[1];//消息数据,字符数组 };msgsz:指定mtext中的有效数据的长度,要发送消息的大小,不含消息类型占用的4个字节,即mtext的长度
msgflg:一般设为0,可以设置IPC_NOWAIT,当消息队列满时,msgsnd将会阻塞,直到消息能写进消息队列
4、msgrcv()函数:从消息队列接受一条消息(一次只能获取一条消息)
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
成功返回mtext中接收到的长度数据,失败返回-1其他参数与msgsnd函数相同msgtyp:指定接受消息的类型,类型可以为0;0:接收第一个消息;小于0:接收类型等于msgtyp的第一个消;大于0:接收类型等于或者小于msgtyp绝对值的第一个消息msgflg:一般设为0,可以设置IPC_NOWAIT