linux创建消息队列参数,【ARM&Linux】消息队列的简单使用

/****************************************************************************************

*文件名: a_process.c

*创建者:

*时 间:

*联 系:

*简 介:

*****************************************************************************************/

/***********************************************************

函数学习:

1、创建消息队列: int msgget(key_t key, int msgflg);

2、发送消息: int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

参数一:消息id

参数二: 数据,

固定格式: struct mymsg{

long mtype; //消息类型

char mtext[512] //消息数据

};

参数三:消息数据长度,例如上面的512

参数四:标志

返回值: 失败-1 成功0

3、接收消息: ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

参数一:消息队列id

参数二:存储消息的结构

参数三:消息数据的大小

参数四:消息类型

= 0 时:忽略类型,直接取第一个消息

> 0 时: 返回消息队列中类型为type的第一个消息

< 0 时: 返回消息类型值小于或等于type绝对值的消息,如果此类有若干个,取最小的

参数五:标志

返回值: 失败-1 成功返回消息数据的数据量(mtext里面)

4、设置消息队列:int msgctl(int msqid, int cmd, struct msqid_ds *buf);

参数一:消息队列id

参数二:命令

参数三:存取消息队列信息的结构

删除消息队列 :

msgctl(msgid, IPC_RMID, NULL);

【综合实例】:

A进程获取键盘输入->构造成消息->添加到消息队列->发送

B进程->取出消息队列->打印消息

a_process.c 进程执行流程:

1、创建消息队列

2、获取键盘输入,要求用户输入两个信息 : 消息类型和消息数据,之后构造成一条消息

3、发送到消息队列

4、删除消息队列

************************************************************/

#include "mytype.h"

#define MSG_SIZE 1024*1

typedef struct{

long type;

char data[MSG_SIZE];

}MY_MSG;

int main()

{

MSG_QUEUE_USE msg_use;

MY_MSG mymsg;

bool running = true;

char buf[128];

long msg_type;

// 1.创建消息队列

msg_use.key = ftok("/bin", 1);

if((msg_use.msgid=msgget(msg_use.key, IPC_CREAT)) < 0)

{

DEBUG_ERROR("msg queue creat failed .

");

exit(EXIT_FAILURE);

}

// 2.循环

while(running)

{

// 3.1 获取消息类型

DEBUG_PRINTF("Please input msg type, 0 for quit : ");

scanf("%ld", &msg_type);

if(msg_type == 0) //如果消息类型为0,则退出循环

{

running = false;

break;

}

// 3.2 获取数据

DEBUG_PRINTF("Please input msg : ");

scanf("%s", buf);

// 3.3 构造消息

mymsg.type = msg_type;

strcpy(mymsg.data, buf);

// 4.发送消息

msgsnd(msg_use.msgid, &mymsg, sizeof(MY_MSG), 0);

}

// 5.删除消息队列

if( msgctl(msg_use.msgid, IPC_RMID, NULL) == 0)

{

DEBUG_INFO("delete msg queue successful .

");

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值