消息队列

来源:互联网 发布:e25歼击车数据 编辑:程序博客网 时间:2024/05/16 05:56
1.消息队列 -队列是种数据结构,按次序存放元素,先入先出队列中的元素就是消息。


2.消息队列的使用方式就是先把数据放入消息中,然后把消息放入队列中。队列的管理由内核完成。


3.消息队列就是以内核管理的一个队列作为交互的媒介。比较常用的IPC。


消息队列的使用步骤:
    1.使用ftok()或共用的头文件提供一个key。

   2.使用msgget(key,……)创建/获取一个消息队列。

   3.使用msgsnd()发送消息(把消息放入队列中)或使用msgrcv()取出消息(把消息从队列中取出)。
   
    4.如果确保不再使用消息队列,可以使用msgctl(IPC_RMID)删除。


消息分为 有类型和无类型消息,无类型消息可以支持任意类型的数据,但只能先入先出,如果放入的顺序和取出的次序不同,一定会出问题,更多的时候使用有类型小型。




有类型消息必须是一个结构体,


struct 名称{//名称  程序员随便起,合法标识符就行
long mtype; //第一个必须long,代表消息类型
    数组或结构;//数据区,数据放在这里
}
其中,mtype必须大于0.


int msgsnd(int msgid,void* msgp,size_t msgsz,int flags)
功能:发送消息到消息队列的末尾。
参数:msgid就是消息队列的ID
msgp 就是消息结构体的首地址
msgsz 就是消息结构体中数据的大小(不带类型玩)
flags取0 或IPC_NOWAIT 0就是满了会等,IPC_NOWAIT满了就直接返回-1
返回 :成功返回0,失败返回-1
ssize_t msgrcv(int msgid,void* msgp,size_t msgsz.long msgtype,int flags)
功能:按类型接受
参数:msgid/msgp/msgsz/flags和msgsnd一样
msgtype  可以取三种值
>0  就是接受特定类型的消息(类型=msgtype)
0  就是接受任意类型的消息(先入先出)
<0  就是接受类型小于等于|msgtype|的消息,从小到大顺序:比如:msgtype传了-3   ,接受消息的类型为1 2 3
返回:失败返回-1,成功返回实际接受的字节数。












































0 0
原创粉丝点击