数码资讯
linux消息队列编程示例
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
本文主要介绍linux消息队列编程的实例。本文阐述消息队列的概念、实现步骤和思路,以及编程代码的示例。
第一,概念
消息队列是消息列表,你可以把一个消息作为一个记录,与一个特定的格式和特定的优先权。这一过程写在一个消息队列权限可以添加新的信息到一定的规律,并具有读取权限的过程可以读取消息。没有阅读。消息队列是持久和内核,该消息将被删除时,内核重新启动或手动删除,在系统范围内,消息队列对应的关键值。
二、步骤和思路
1。把核心价值观
2。打开和创建消息队列
三.发送一个消息
4。接收消息
以下是一个具体的观察:
1。把核心价值观
复制代码代码如下所示:
key_t ftok(char *的路径名,煤焦项目)
第一个文件,返回文件名对应的键值,并未能回到-1.proj是项目,名称写随便,不是0。
名是您指定的文件名(已存在的文件名)。你需要- T的权限或权限,通常设定为/tmp或设置为,。我不觉得这个功能是在这里完成的,因为关键值可以由本身,例如:#定义key_msg 0x101
2。打开和创建消息队列
复制代码代码如下所示:
Int msgget(key_t关键,int msgflg)
第一个文件。关键是通过ftok。
msgflg有:
ipc_creat创建一个新文件权限0666消息队列。
ipc_excl与ipc_creat一起使用,表示如果消息队列创建已经存在,则返回错误的。
ipc_nowait读写消息没有被封锁。
一个新的消息队列被创建时没有消息队列对应的关键和ipc_creat国旗或关键的参数是在msgflg ipc_private。
三.发送一个消息
复制代码代码如下所示:
Int msgsnd(int msqid,结构msgbuf * mSGP msgsz,int,int msgflg)
将消息发送到消息队列中。Msqid是消息队列的ID,和mSGP是消息的结构。Msgsz是消息的长度,不同的数组的大小。Msgflg的消息是一个标志,通常0,或ipc_nowait.error返回1。
消息格式
复制代码代码如下所示:
结构msgbuf {
长米型;
char mtext { 100 };
};
4。接收消息
复制代码代码如下所示:
Int msgrcv(int msqid,结构msgbuf * mSGP,int msgsz,长msgtyp,int)
由msqid表示消息队列读取消息msgtyp类型和存储消息由mSGP指定的msgbuf结构。在阅读队列中的邮件将被删除。大小是结构中的数据的大小,而不计算msgtyp错误返回1。
三。实例
创建消息队列,由子进程发送数据,父进程接收数据。用于存储数据并将数据读取到队列中。
复制代码代码如下所示:
#包括
#包括
#包括
#包括
#包括
#定义马克斯100
struct哈哈{
长米型;
char数据{ };
};
int main(int argc、argv { } { char *)
int PID;
如果(argc!= 2){
printf(用法:味精{消息} ;
返回- 1;
}
key_t关键;
如果((关键= ftok( / tmp,'克')< 0)){ / /这个文件夹必须存在,并对属性列表属性
printf(获得关键的错误!;
返回- 1;
}
Int mgsid;
如果(((mgsid = msgget(关键,ipc_creat | 0666))= = 1){ / /关键值也可以写成一个数
printf(MGS队列创建错误;
返回- 1;
}
PID =叉();
如果(PID < 0){
Printf (fork create error! ;
(1)_exit;
}
如果(PID = 0){
printf(欢迎孩子过程发送消息…;
睡眠(1);
哈哈呵呵;
呵呵。mtype = getppid();
Strcpy(hehe.data,argv { 1 });
如果(msgsnd(mgsid,呵呵,sizeof(呵呵。数据),0)< 0){ / /注长在这里
printf(发送错误!!!!;
(1)_exit;
{ }人
printf(发送完成!;
(0)_exit;
}
其他{ }
等待(NULL);
printf(欢迎家长过程接收消息…;
睡眠(1);
Gaga哈哈;
如果(msgrcv(mgsid,Gaga,马克斯,getpid(),0)< 0){
printf(接收错误!!!!;
(1)_exit;
{ }人
printf(接收完成!;
printf(消息%s
}
}
返回0;
}
第一,概念
消息队列是消息列表,你可以把一个消息作为一个记录,与一个特定的格式和特定的优先权。这一过程写在一个消息队列权限可以添加新的信息到一定的规律,并具有读取权限的过程可以读取消息。没有阅读。消息队列是持久和内核,该消息将被删除时,内核重新启动或手动删除,在系统范围内,消息队列对应的关键值。
二、步骤和思路
1。把核心价值观
2。打开和创建消息队列
三.发送一个消息
4。接收消息
以下是一个具体的观察:
1。把核心价值观
复制代码代码如下所示:
key_t ftok(char *的路径名,煤焦项目)
第一个文件,返回文件名对应的键值,并未能回到-1.proj是项目,名称写随便,不是0。
名是您指定的文件名(已存在的文件名)。你需要- T的权限或权限,通常设定为/tmp或设置为,。我不觉得这个功能是在这里完成的,因为关键值可以由本身,例如:#定义key_msg 0x101
2。打开和创建消息队列
复制代码代码如下所示:
Int msgget(key_t关键,int msgflg)
第一个文件。关键是通过ftok。
msgflg有:
ipc_creat创建一个新文件权限0666消息队列。
ipc_excl与ipc_creat一起使用,表示如果消息队列创建已经存在,则返回错误的。
ipc_nowait读写消息没有被封锁。
一个新的消息队列被创建时没有消息队列对应的关键和ipc_creat国旗或关键的参数是在msgflg ipc_private。
三.发送一个消息
复制代码代码如下所示:
Int msgsnd(int msqid,结构msgbuf * mSGP msgsz,int,int msgflg)
将消息发送到消息队列中。Msqid是消息队列的ID,和mSGP是消息的结构。Msgsz是消息的长度,不同的数组的大小。Msgflg的消息是一个标志,通常0,或ipc_nowait.error返回1。
消息格式
复制代码代码如下所示:
结构msgbuf {
长米型;
char mtext { 100 };
};
4。接收消息
复制代码代码如下所示:
Int msgrcv(int msqid,结构msgbuf * mSGP,int msgsz,长msgtyp,int)
由msqid表示消息队列读取消息msgtyp类型和存储消息由mSGP指定的msgbuf结构。在阅读队列中的邮件将被删除。大小是结构中的数据的大小,而不计算msgtyp错误返回1。
三。实例
创建消息队列,由子进程发送数据,父进程接收数据。用于存储数据并将数据读取到队列中。
复制代码代码如下所示:
#包括
#包括
#包括
#包括
#包括
#定义马克斯100
struct哈哈{
长米型;
char数据{ };
};
int main(int argc、argv { } { char *)
int PID;
如果(argc!= 2){
printf(用法:味精{消息} ;
返回- 1;
}
key_t关键;
如果((关键= ftok( / tmp,'克')< 0)){ / /这个文件夹必须存在,并对属性列表属性
printf(获得关键的错误!;
返回- 1;
}
Int mgsid;
如果(((mgsid = msgget(关键,ipc_creat | 0666))= = 1){ / /关键值也可以写成一个数
printf(MGS队列创建错误;
返回- 1;
}
PID =叉();
如果(PID < 0){
Printf (fork create error! ;
(1)_exit;
}
如果(PID = 0){
printf(欢迎孩子过程发送消息…;
睡眠(1);
哈哈呵呵;
呵呵。mtype = getppid();
Strcpy(hehe.data,argv { 1 });
如果(msgsnd(mgsid,呵呵,sizeof(呵呵。数据),0)< 0){ / /注长在这里
printf(发送错误!!!!;
(1)_exit;
{ }人
printf(发送完成!;
(0)_exit;
}
其他{ }
等待(NULL);
printf(欢迎家长过程接收消息…;
睡眠(1);
Gaga哈哈;
如果(msgrcv(mgsid,Gaga,马克斯,getpid(),0)< 0){
printf(接收错误!!!!;
(1)_exit;
{ }人
printf(接收完成!;
printf(消息%s
}
}
返回0;
}
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。