标签:函数 队列 通信 消息 key msg include
消息队列:消息队列就是一个消息的列表。用户可以从消息队列种添加消息、读取消息 等。
消息队列的实现包括:创建或打开消息队列、添加消息、读取消息和控制消息队列这四种操 作。
我们在学习消息队列时有四个离不开也很重要的函数:
函数msgget:创建或打开消息队列,消息队列的数量会受到系统消 息队列数量的限制;
函数 msgsnd:把消息添加到已打开的消息队列 末尾;
函数 msgrcv:读取消息,消息从消息队列中取走,它可以指定取走某一条消息;
函数 msgctl:控制消息队列,它可以完成多项功能。
首先介绍msgget 函数语法要点:
msgsnd 函数语法要点:
msgrcv 函数语法要点:
msgrcv 函数语法要点:
msgctl 函数语法要点:
实例:
msg.c
源代码:
/*msg.c*/
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define BUFSZ 512
struct message{
long msg_type;
char msg_text[BUFSZ];
};
int main()
{
int qid;
key_t key;
int len;
struct message msg;
/*根据不同的路径和关键表示产生标准的 key*/
if((key=ftok(".",'a'))== -1){
perror("ftok");
exit(1);
}
/*创建消息队列*/
if((qid=msgget(key,IPC_CREAT|0666))== -1){
perror("msgget");
exit(1);
}
printf("opened queue %d\n",qid);
puts("Please enter the message to queue:");
if((fgets((&msg)->msg_text,BUFSZ,stdin))==NULL){
puts("no message");
exit(1);
}
msg.msg_type = getpid();
len = strlen(msg.msg_text);
/*添加消息到消息队列*/
if((msgsnd(qid,&msg,len,0))<0){
perror("message posted");
exit(1);
}
/*读取消息队列*/
if(msgrcv(qid,&msg,BUFSZ,0,0)<0){
perror("msgrcv");
exit(1);
}
printf("message is:%s\n",(&msg)->msg_text);
/*从系统内核中移走消息队列。*/
if((msgctl(qid,IPC_RMID,NULL))<0){
perror("msgctl");
exit(1);
}
exit(0);
}
运行结果:
运行结果:
标签:函数,队列,通信,消息,key,msg,include 来源: https://blog.csdn.net/qq_57611608/article/details/123310193
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。