linux——消息队列发送和读取函数
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); //读取消息成功返回消息数据的长度失败返回‐1 参数 msgid:消息队列的ID msgp:指向消息的指针常用结构体msgbuf如下 struct msgbuf { long mtype; //消息类型 char mtext[N]; //消息正文 } size:发送的消息正文你的字节数 flag: IPC_NOWAIT 消息没有发送完成函数也会立即返回 0知道发送完成函数才返回 返回值 成功0 失败‐1ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg); //从一个消息队列中获取消息 参数 msgid:消息队列的ID msgp:要接收消息的缓冲区 size:要接收的消息的字节数 msgtype: 0:接收消息队列中第一个消息 大于0接收消息队列中第一个类型为msgtyp的消息 小于0接收消息队列中类型值不大于msgtyp的绝对值且类型值又最小的消息。 flag: 0:若无消息函数一直阻塞 IPC_NOWAIT若没有消息进程会立即返回ENOMSG。 返回值 成功接收到的消息i长度 出错‐1函数msgrcv在读取消息队列时type参数有下面几种情况type 0,返回队列中的第一消息type 0,返回队列中消息队列类型为type的第一个消息type 0,返回队列中消息类型值小于或等于type绝对值的消息如果有多个则取类型值最小的消息。可以看出type值非0时用于以非先进先出次序读取消息也可以把type看成优先级的权值#includestdio.h #include sys/types.h #include sys/ipc.h #include sys/msg.h #include stdlib.h #includestring.h struct msgbuf { long mtype; char mtest[128]; char ID[4]; }; int main() { struct msgbuf sendbuf,readbuf; int msgid; int readret; msgid msgget(IPC_PRIVATE,0755); if(msgid -1) { printf(creat message queue failed\n); return -1; } system(ipcs -q); printf(creat message queue succeed! msgid %d\n,msgid); //int msgbuf sendbuf.mtype 100; printf(please input to message queue:\n); fgets(sendbuf.mtest,128,stdin); //send message to message queue msgsnd(msgid,(void *)sendbuf,strlen(sendbuf.mtest),0); //read memset(readbuf.mtest,0,128); readret msgrcv(msgid,(void *)readbuf,128,100,0); printf(message is %s:\n,readbuf.mtest); printf(total have %d byte\n,readret); return 0; }创建一个消息队列给它一个编号 msgid准备一条消息类型 100内容你自己输入把消息发送到队列里再从队列里把消息取回来打印出来看看对不对
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2476826.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!