在消息队列linux c中发送不同类型的消息

问题描述

我有这样的代码

#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define MAXLINE 1024

struct my_msgbuf {
        long mtype;
        char mtext[MAXLINE];
};

int main(void)
{
    struct my_msgbuf buf;

    int msqid;
    key_t key;

    if ((key = ftok("client.c",'B')) == -1) {
        perror("ftok");
        exit(1);
    }

    if ((msqid = msgget(key,0644 | IPC_CREAT)) == -1) {
        perror("msgget");
        exit(1);
    }
while(1){
        printf("Write a type:\n");
        scanf("%ld",&buf.mtype);
        printf("Write a text:\n");
        fgets(buf.mtext,MAXLINE,stdin);

        if (msgsnd(msqid,(struct msgbuf *)&buf,sizeof(buf),0) == -1){
            perror("msgsnd");
        }
}

    if (msgctl(msqid,IPC_RMID,NULL) == -1) {
        perror("msgctl");
        exit(1);
    }

    return 0;
}```









代码使用linux(c)中的ipc消息队列发送消息,但是它发送类型等于'1'的消息。我必须发送消息,但每条消息都必须具有不同的类型。我删除了“ while”,仅保留了fgets。没有“ while”功能fget直到换行或您达到MAXLINE为止。没用我想达到以下效果

输入类型:
1(我)
文字
第一条消息(我)
一个类型:
2(我)
文字
第二条消息(我)
....

编译并运行程序后,我到达:

输入类型:
1(我)
文字
一个类型:
2(我)
文字
一个类型:
....

这是我修改后的代码。怎么了?

const {GraphQLServer,GrphQLServer,PubSub } = require('graphql-yoga');
const db = require('./db');
const Query = require('./resolvers/Query');
const Mutation = require('./resolvers/Mutation');
const subscription = require('./resolvers/Substription')

const pubsub = new PubSub();



const typeDefs=`

type Query{

me:User!
signlevalue(name:String):String
sum(marks:[Int]):Int!
user:[User]

}




type Mutation{
createuser(id:ID,name:String,email:String):[User]
}


type User{
id:ID
name:String
email:String
age:Int
}


type Subscription{
    
    count:Int
}


`


const resolvers={
    Query,Mutation,subscription

  

}

const server= new GraphQLServer({
    typeDefs,resolvers,context:{
        db,pubsub
    }
})

server.start(()=>{
    console.log('servr is running on port 4000');
})

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)