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

文档序号:9349813阅读:来源:国知局
中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0047]图1示出了本发明实施例一提供的进程间的通信方法的流程图,如图1所示,本实施例的进程间的通信方法包括如下步骤:
[0048]步骤101:第一进程将第一变量和待发送的参数依次存放在预先申请的内存中,其中每个待发送的参数以’ \0’作为结尾,所述第一变量用于存储待发送的参数的个数。
[0049]在本步骤中,由于第一变量用于存储待发送的参数的个数,因此第一变量的数据类型为可以为整型或字符型。由于无符号整型unsigned int类型的最大范围非常大(2的32次方-1),一般地两进程间发送的消息中所带的参数个数不会超过这个范围,所以优选地,采用unsigned int类型可以绝对满足使用。
[0050]第一进程将第一变量放到内存的头部,后面依次存放各个参数,为了方便第二进程读取各个参数,第一进程在存放参数时令每个参数以’ \0’结尾,参数存放结束后,执行步骤102,即第一进程将这块内存中的消息发送给第二进程。
[0051]需要指出的是,在步骤101之前,该方法还包括步骤101’.
[0052]步骤101’:第一进程根据所述第一变量和待发送的参数申请一块大小为Ml的内存:
[0053]Ml = sizeof l+strlenl+strlen2+…+strlenN+N ;
[0054]其中,N为第一消息中的参数的个数,sizeofl为第一变量的数据类型的长度,单位为字节。strlenl为第一个参数的长度,strlen2为第二个参数的长度,strlenN为第N个参数的长度。
[0055]其中,strlenl= strlen (第一个参数),strlenN = strlen (第 N 个参数),strlenO为求字符串长度的函数,单位是字节。sizeofl为第一变量的数据类型的长度,举个例子,当第一变量的数据类型为unsigned int类型时,sizeofl = sizeof (unsignedint)。由于每个参数结尾都添加了字符’ \0’,因此在计算内存大小Ml时需要加上N。
[0056]在申请好内存之后再执行步骤101,即在申请好的内存中依次存放第一变量和待发送的参数。这样做可以保证无论有多少个参数,都可以正常的组装消息,不受到数组大小的限制。
[0057]步骤102:第一进程将包含第一变量和待发送的参数的第一消息发送给第二进程。
[0058]步骤103:第二进程在接收到所述第一消息之后,根据所述第一消息中的第一变量获取第一消息中的参数的个数。
[0059]步骤104:第二进程根据所述第一消息中的参数的个数生成指针数组,并利用所述指针数组依次读取第一消息中的所有参数。
[0060]在本步骤中,第二进程首先根据所述第一消息中的参数的个数生成指针数组,其中所述指针数组的数组元素分别为P [O],P [I],…,p[N_l];然后利用P [O]读取第一个参数,利用 p[i] = P [1-1]+strlen (p[1-l])+l 读取第 i+1 个参数,其中 I < i < N,N 为第一消息中的参数的个数,strlen (P [1-Ι])为第i个参数的长度;
[0061]所述数组元素p[0]指向第一消息中第一个参数的起始地址,所述数组元素P[1-Ι]指向第一消息中第i个参数的起始地址。
[0062]需要指出的是,在步骤104之前,本方法还包括步骤104’。
[0063]步骤104’:第二进程根据所述第一消息中的参数的个数申请一块大小为M2的内存:
[0064]M2 = sizeof2*N ;
[0065]其中,sizeof2为一个指针需要的内存大小。第二进程在接收到第一消息之后,首先提取参数个数,然后根据该值来申请一块内存,内存大小M2 = sizeof2*N =sizeof (void*) *N,即N个指针需要的内存大小,这样后续就可以通过类似数组的方法来访问各个指针,比如P [O],p[l],…,p[N-l]。
[0066]从上述步骤103和步骤104可知,第二进程接收到第一消息后,首先读取第一变量获取参数个数N,以便知道有多少个参数。然后第二进程开始解析第一消息,由于第一消息中的每个参数以’ \0’结尾,根据C语言的规定,这就是字符串的结束符,因此只需要一个指针P指向参数的起始地址,那么这个指针自然就是指向这个参数了。
[0067]为了读取参数,第二进程设置了一个指针数组p[N],N是参数的个数,p[0]指向第一变量后面的地址,那么就是第一个参数的地址,这样P[0]就是指向第一个参数了,p[l]=P [O] +strlen (p [O]) +1 (strlen (p [O])为第一个参数的长度,加I是因为其结尾是字符’\0’,p[0]是第一个参数的起始地址)就指向了第二个参数的起始地址,那么p[l]就是指向第二参数了,以此类推,可以轻松的获取所有参数。这样通过本实施例的方法,不但可以不用将每个参数的长度固定为一个值,还可以方便的读取可变长度的参数。
[0068]在本实施例中,第一进程在预先申请的内存中依次存放第一变量和待发送的参数,其中所述第一变量用于存储待发送的参数的个数。第一进程将包含第一变量和待发送的参数的第一消息发送给第二进程。而第二进程通过读取第一变量获得第一进程发送的参数的个数,在此基础之上,第二进程通过设置一个数组长度为参数个数的指针数组来实现访问某一参数。由于本实施例所述方法只需在第一变量中设置待发送的参数的个数,而不用考虑参数的长度问题。因此在参数长度或参数个数发生变化时,采用本实施例所述的方法,不用修改源代码,只需要在第一变量后面顺序存入参数就可以,因此本实施例所述方法可以方便地处理可变长度的参数。另外,本实施例所述方法还可以实现参数的快速访问。
[0069]图2示出了实施例二提供的进程间的通信系统的结构图,如图2所示,本实施例的进程间的通信系统包括第一进程通信装置100和第二进程通信装置200 ;
[0070]所述第一进程通信装置100包括存放单元1001和发送单元1002 ;
[0071 ] 所述第二进程通信装置200包括接收单元2001、获取单元2002和读取单元2003 ;
[0072]所述存放单元1001,用于将第一变量和待发送的参数依次存放在预先申请的内存中,其中每个待发送的参数以’ \0’作为结尾,所述第一变量用于存储待发送的参数的个数;
[0073]所述发送单元1002,用于将包含第一变量和待发送的参数的第一消息发送给第二进程通信装置200 ;
[0074]所述接收单元2001,用于接收第一进程通信装置100发送的第一消息;
[0075]所述获取单元2002,用于根据所述第一消息中的第一变量获取第一消息中的参数的个数;
[0076]所述读取单元2003,用于根据所述第一消息中的参数的个数生成指针数组,并利用所述指针数组依次读取第一消息中的所有参数。
[0077]进一步地,所述第一进程通信装置100还包括第一申请单元1003,所述第一申请单元1003用于根据所述第一变量和待发送的参数申请一块大小为Ml的内存:
[0078]Ml = sizeof l+strlenl+strlen2+…+strlenN+N ;
[0079]其中,N为第一消息中的参数的个数,sizeofl为第
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1