ps毕业设计做网站界面,wordpress用户密码原理,网站建设合同有哪些,域名怎么实名认证一、消息队列的原理
一个进程给另一个进程发送类型数据块的方式每一个数据快都被认为是有一个类型的#xff0c;接收者进程接收的数据快可以有不同的类型值
二、消息队列的接口
和共享内存的接口很像#xff1a;
消息队列的创建 创建消息队列我们需要用msgget函数#x…一、消息队列的原理
一个进程给另一个进程发送类型数据块的方式每一个数据快都被认为是有一个类型的接收者进程接收的数据快可以有不同的类型值
二、消息队列的接口
和共享内存的接口很像
消息队列的创建 创建消息队列我们需要用msgget函数msgget函数的函数原型如下
int msgget(key_t key, int msgflg); 1 说明一下
创建消息队列也需要使用ftok函数生成一个key值这个key值作为msgget函数的第一个参数。 msgget函数的第二个参数与创建共享内存时使用的shmget函数的第三个参数相同。 消息队列创建成功时msgget函数返回的一个有效的消息队列标识符用户层标识符。 消息队列的释放 释放消息队列我们需要用msgctl函数msgctl函数的函数原型如下
int msgctl(int msqid, int cmd, struct msqid_ds *buf); 1 说明一下 msgctl函数的参数与释放共享内存时使用的shmctl函数的三个参数相同只不过msgctl函数的第三个参数传入的是消息队列的相关数据结构。
向消息队列发送数据 向消息队列发送数据我们需要用msgsnd函数msgsnd函数的函数原型如下
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); 1 msgsnd函数的参数说明
第一个参数msqid表示消息队列的用户级标识符。 第二个参数msgp表示待发送的数据块。 第三个参数msgsz表示所发送数据块的大小 第四个参数msgflg表示发送数据块的方式一般默认为0即可。 msgsnd函数的返回值说明
msgsnd调用成功返回0。 msgsnd调用失败返回-1。 其中msgsnd函数的第二个参数必须为以下结构
struct msgbuf{ long mtype; /* message type, must be 0 */ char mtext[1]; /* message data */ }; 1 2 3 4 注意 该结构当中的第二个成员mtext即为待发送的信息当我们定义该结构时mtext的大小可以自己指定。
从消息队列获取数据 从消息队列获取数据我们需要用msgrcv函数msgrcv函数的函数原型如下
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); 1 msgrcv函数的参数说明
第一个参数msqid表示消息队列的用户级标识符。 第二个参数msgp表示获取到的数据块是一个输出型参数。 第三个参数msgsz表示要获取数据块的大小 第四个参数msgtyp表示要接收数据块的类型。 msgrcv函数的返回值说明
msgsnd调用成功返回实际获取到mtext数组中的字节数。 msgsnd调用失败返回-1。
三、消息队列的指令操作
IPC资源必须删除否则不会自动清除除非重启消息队列的生命周期也是随内核的
// 可以查看系统中的消息队列
ipcs -p
// 可以查看系统中的共享内存
ipcs -m
// 可以查看系统中的消息队列共享内存和信号量
ipcs
// 进行删除系统中的消息队列
ipcrm -q msgid