13-LINUX--消息队列

一.消息队列

1.消息队列:消息队列为一个进程向另一个进程发送一个数据块提供了条件,每个数据块会包含一个类型。

2.相关函数

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

 2>. msgsnd:把消息添加到消息队列 

 3>.msgrcv :从一个消息队列中获取信息

3.代码示例

 #include <sys/types.h>
 #include <sys/ipc.h>
 #include <sys/msg.h>
 /*
     msgget()创建或者获取一个消息队列
     msgget()成功返回消息队列 ID,失败返回-1
     msqflg: IPC_CREAT
 */
     int msgget(key_t key, int msqflg); 
 /*
 msgsnd()发送一条消息,消息结构为:
 struct msgbuf
 {
     long mtype; // 消息类型, 必须大于 0
     char mtext[1]; // 消息数据
 };
     msgsnd()成功返回 0, 失败返回-1
     msqsz: 指定 mtext 中有效数据的长度
     msqflg:一般设置为 0 可以设置 IPC_NOWAIT
 */
 int msgsnd(int msqid, const void *msqp, size_t msqsz, int msqflg); 
 /*
     msgrcv()接收一条消息
     msgrcv()成功返回 mtext 中接收到的数据长度, 失败返回-1
     msqtyp: 指定接收的消息类型,类型可以为 0
     msqflg: 一般设置为 0 可以设置 IPC_NOWAIT
 */
 ssize_t msgrcv(int msqid, void *msgp, size_t msqsz, long msqtyp, int msqflg); 
 /*
     msgctl()控制消息队列
     msgctl()成功返回 0,失败返回-1
     cmd: IPC_RMID
 */
 int msgctl(int msqid, int cmd, struct msqid_ds *buf);

a.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/msg.h>

struct mess
{
        long type;
        char buff[128];
};

int main()
{
        int msgid = msgget((key_t)1234,IPC_CREAT|0600);
        if(msgid == -1)
        {
                exit(0);
        }

        struct mess m;
        m.type = 2;
        char s[128] = {0};
        printf("input:  ");
        fgets(s,128,stdin);
        strcpy(m.buff,s);
        msgsnd(msgid,&m,128,0);//添加数据       

        exit(0);
}
    

b.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/msg.h>

struct mess
{
        long type;
        char buff[128];
};

int main()
{
        int msgid = msgget((key_t)1234,IPC_CREAT|0600);
        if(msgid == -1)
        {
                exit(0);
        }

        struct mess m;
        msgrcv(msgid,&m,128,2,0);
        printf("read msg =%s\n",m.buff);

        exit(0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果蛋蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值