进程间的通信方法及系统的制作方法

文档序号:9349813阅读:372来源:国知局
进程间的通信方法及系统的制作方法
【技术领域】
[0001]本发明涉及计算机技术领域,具体涉及一种进程间的通信方法及系统。
【背景技术】
[0002]Iinux下的用户态进程之间通常会使用消息机制通信。通常为了方便会将消息定义为类似char msg[a] [b]的字符数组,它表明消息可以包含a个参数,每个参数最大长度是b。当进程收到这样的消息后,可以方便地访问任意一个参数,比如可以通过msg[0]来访问第一个参数,msg[l]来访问第二个参数。
[0003]但是上述方法人为地限制了每个消息的最大长度,当需要更多更长的消息时,只能修改源代码,将a或者b扩大,这样操作起来非常不方便。

【发明内容】

[0004]针对现有技术中的缺陷,本发明提供一种进程间的通信方法及系统,解决了现有技术中采用字符数组存储消息而限制消息长度的问题。
[0005]为解决上述问题,第一方面,本发明提供了一种进程间的通信方法,包括:
[0006]第一进程将第一变量和待发送的参数依次存放在预先申请的内存中,其中每个待发送的参数以’ \0’作为结尾,所述第一变量用于存储待发送的参数的个数;
[0007]第一进程将包含第一变量和待发送的参数的第一消息发送给第二进程;
[0008]第二进程在接收到所述第一消息之后,根据所述第一消息中的第一变量获取第一消息中的参数的个数;
[0009]第二进程根据所述第一消息中的参数的个数生成指针数组,并利用所述指针数组依次读取第一消息中的所有参数。
[0010]进一步地,在第一进程将第一变量和待发送的参数依次存放在预先申请的内存中之前,所述方法还包括:
[0011]第一进程根据所述第一变量和待发送的参数申请一块大小为Ml的内存:
[0012]Ml = sizeof l+strlenl+strlen2+…+strlenN+N ;
[0013]其中,N为第一消息中的参数的个数,sizeofl为第一变量的数据类型的长度,strlenl为第一个参数的长度,strlen2为第二个参数的长度,strlenN为第N个参数的长度,单位为字节。
[0014]进一步地,第二进程根据所述第一消息中的参数的个数生成指针数组,并利用所述指针数组依次读取第一消息中的所有参数包括:
[0015]第二进程根据所述第一消息中的参数的个数生成指针数组,其中所述指针数组的数组元素分别为P [O],P [I],…,P[N-1];
[0016]利用p[0]读取第一个参数,利用 p[i] = P[1-1]+strlen(p[1-l])+l 读取第 i+1个参数,其中I < i < N,N为第一消息中的参数的个数,strlen(p[1-l])为第i个参数的长度;
[0017]所述数组元素p[0]指向第一消息中第一个参数的起始地址,所述数组元素P[1-Ι]指向第一消息中第i个参数的起始地址。
[0018]进一步地,在第二进程根据所述第一消息中的参数的个数生成指针数组之前,所述方法还包括:
[0019]第二进程根据所述第一消息中的参数的个数申请一块大小为M2的内存:
[0020]M2 = sizeof2*N ;
[0021]其中,sizeof2为一个指针需要的内存大小。
[0022]进一步地,所述第一变量的数据类型为整型或字符型。
[0023]第二方面,本发明还提供了一种进程间的通信系统,包括第一进程通信装置和第二进程通信装置;
[0024]所述第一进程通信装置包括存放单元和发送单元;
[0025]所述第二进程通信装置包括接收单元、获取单元和读取单元;
[0026]所述存放单元,用于将第一变量和待发送的参数依次存放在预先申请的内存中,其中每个待发送的参数以’ \0’作为结尾,所述第一变量用于存储待发送的参数的个数;
[0027]所述发送单元,用于将包含第一变量和待发送的参数的第一消息发送给第二进程通信装置;
[0028]所述接收单元,用于接收第一进程通信装置发送的第一消息;
[0029]所述获取单元,用于根据所述第一消息中的第一变量获取第一消息中的参数的个数;
[0030]所述读取单元,用于根据所述第一消息中的参数的个数生成指针数组,并利用所述指针数组依次读取第一消息中的所有参数。
[0031 ] 进一步地,所述第一进程通信装置还包括第一申请单元,所述第一申请单元用于根据所述第一变量和待发送的参数申请一块大小为Ml的内存:
[0032]Ml = sizeof l+strlenl+strlen2+…+strlenN+N ;
[0033]其中,N为第一消息中的参数的个数,sizeofl为第一变量的数据类型的长度,strlenl为第一个参数的长度,strlen2为第二个参数的长度,strlenN为第N个参数的长度,单位为字节。
[0034]进一步地,所述读取单元包括生成模块和读取模块;
[0035]所述生成模块用于根据所述第一消息中的参数的个数生成指针数组,其中所述指针数组的数组元素分别为P [O],P [I],…,p[N_l];
[0036]所述读取模块用于利用p[0]读取第一个参数,利用p[i]=p[1-l]+strlen(p[1-l])+l读取第i+1个参数,其中I彡i彡N,N为第一消息中的参数的个数,strlen (P [1-Ι])为第i个参数的长度;
[0037]所述数组元素p[0]指向第一消息中第一个参数的起始地址,所述数组元素P [1-Ι]指向第一消息中第i个参数的起始地址。
[0038]进一步地,所述第二进程通信装置还包括第二申请单元,所述第二申请单元用于根据所述第一消息中的参数的个数申请一块大小为M2的内存:
[0039]M2 = sizeof2*N ;
[0040]其中,sizeof2为一个指针需要的内存大小。
[0041]进一步地,所述第一变量的数据类型为整型或字符型。
[0042]由上述技术方案可知,本发明所述的进程间的通信方法,首先第一进程在预先申请的内存中依次存放第一变量和待发送的参数,其中所述第一变量用于存储待发送的参数的个数。然后第一进程将包含第一变量和待发送的参数的第一消息发送给第二进程。在第二进程接收到第一消息之后,第二进程通过读取第一变量获得第一进程发送的参数的个数,在此基础之上,第二进程通过设置一个数组长度为参数个数的指针数组来实现访问某一参数。由于本发明所述方法只需在第一变量中设置待发送的参数的个数,而不用考虑参数的长度问题。故在参数长度或参数个数发生变化时,采用本发明所述的方法,不用修改源代码,只需要在第一变量后面顺序存入参数就可以,因此本发明所述方法可以方便地处理可变长度的参数。另外,本发明所述方法还可以实现参数的快速访问。
【附图说明】
[0043]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0044]图1是本发明实施例一提供的进程间的通信方法的流程图;
[0045]图2是本发明实施例二提供的进程间的通信系统的结构示意图。
【具体实施方式】
[0046]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1