linux进程间消息队列编程,Linux C语言高级编程之使用消息队列实现进程间通信!重点内容!!!...

消息队列实现进程间的通信

消息队列实现进程间通信的过程:首先将数据打包成指定格式的消息,其中一个进程负责将消息发送到队列中,另外一个进程通过接收队列中的消息,从而实现进程间的通信。

消息队列实现进程间通信的流程如下:

1)使用ftok函数,获取key值;

2)使用msgget函数,创建/获取消息队列;

3)使用msgsnd/msgrcv函数,发送消息到/接收消息队列中的消息;

4)使用msgctl函数,删除消息队列;

相关函数介绍

1、msgget函数:创建/获取消息队列

函数原型:

#include

#include

#include

int msgget(key_t key, int msgflg);

参数解析:

1)key值,ftok函数的返回值

2)操作标志,如下:

IPC_CREAT:创建;

IPC_EXCL:若存在则创建失败;

0:获取已经存在的消息队列;

返回值:成功返回消息队列的ID,失败返回-1;

功能:主要用于创建/获取消息队列。

注意:

当创建新的消息队列时,需要通过按位或的方式来指定权限信息,如:0664。

2、msgsnd函数:发送指定的消息到指定的消息队列

函数原型:

#include

#include

#include

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

参数解析:

1)消息队列的ID,msgget函数的返回值;

struct msgbuf

{

long mtype;       //消息的类型, must be > 0

char mtext[1];    //消息的内容,可以是其他类型

};

3)消息的大小:主要用于指定消息内容的大小,不包括消息的类型;

4)发送消息的标志,默认给0即可;

功能:用于发送指定的消息到指定的消息队列中。

3、msgrcv函数:接收指定消息队列中的消息

函数原型:

#include

#include

#include

ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);

参数解析:

1)消息队列的ID,msgget函数的返回值

3)期望接收的消息大小

4)期望接收的消息类型

0  :表示始终读取消息队列中的第一个消息;

>0 :表示始终读取消息队列中第一个类型为msgtyp的消息;

<0 :表示始终读取消息队列中类型小于等于msgtyp绝对值的消息,其中最小的优先读取;

5)消息接收的标志,默认给0即可;

返回值:成功返回实际接收的数据大小,失败返回-1;

功能:用于接收指定消息队列中的消息。

4、msgctl函数:用于操作指定的消息队列

函数原型:

#include

#include

#include

int msgctl(int msqid, int cmd, struct msqid_ds *buf);

参数解析:

1)消息队列的ID,msgget函数的返回值;

2)具体的操作命令,如:

IPC_RMID - 删除消息队列,此时第三个参数给NULL即可;

3)结构体指针;

函数功能:用于操作指定的消息队列。

返回值:成功返回0 ,出错返回-1,错误原因存于error中 。

小知识(消息队列相关命令)

1)ipcs -q  表示查看系统中存在的消息队列;

2)ipcrm -q 消息队列的ID  表示删除指定的消息队列;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值