如何解决在消息队列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 举报,一经查实,本站将立刻删除。