CN114443316B - 一种对象访问方法、装置及电子设备 - Google Patents
一种对象访问方法、装置及电子设备 Download PDFInfo
- Publication number
- CN114443316B CN114443316B CN202011218064.0A CN202011218064A CN114443316B CN 114443316 B CN114443316 B CN 114443316B CN 202011218064 A CN202011218064 A CN 202011218064A CN 114443316 B CN114443316 B CN 114443316B
- Authority
- CN
- China
- Prior art keywords
- function
- functions
- library
- access
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 230000006870 function Effects 0.000 claims description 414
- 238000004590 computer program Methods 0.000 claims description 5
- 230000005540 biological transmission Effects 0.000 abstract description 11
- 238000005516 engineering process Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 230000004044 response Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 5
- 239000011800 void material Substances 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种对象访问方法、装置及电子设备,其中,所述方法包括:接收对第一对象的访问请求,响应于所述访问请求,根据所述访问请求的请求类型,在***函数库中进行函数替换得到的第一函数集合中确定与所述请求类型对应的目标函数;调用所述目标函数,执行对所述第一对象的访问。通过链接程序的函数替换功能,在通用操作***函数库中可直接实现基于对象存储接口调用对象存储函数库中的函数,而无需专用软件进行转义,缩短了数据传输路径,提高了数据的传输性能。
Description
技术领域
本发明实施例涉及存储技术领域,尤其涉及一种对象访问方法、装置及电子设备。
背景技术
随着存储技术的发展,应用服务提供商越来越多地在应用后台服务器中使用对象存储技术来存储多媒体文件。应用服务提供商的后台服务器可以通过调用对象存储技术的应用程序接口(Application Programming Interface,API)对接收到的用户数据实现对象存储。
目前,通用的操作***函数库中通常使用文件存储技术的API实现对用户数据的文件存储,其并没有封装对象存储技术的API。当应用服务提供商的后台服务器需要调用对象存储技术的API时,需要通过用户空间文件***(Filesystemin Userspace,FUSE)将文件存储技术的API转换成对象存储技术的API实现。上述转换过程中会使得数据传输路径加长,导致用户数据的传输性能下降。
发明内容
本发明实施例的目的在于提供一种对象访问方法、装置及电子设备,解决了现有技术中需要通过专用软件转义而导致数据传输性能下降的问题。
为了达到上述目的,第一方面,本发明实施例提供一种对象访问方法,包括:
接收对第一对象的访问请求;
响应于所述访问请求,根据所述访问请求的请求类型,在***函数库中的第一函数集合中确定与所述请求类型对应的目标函数;
调用所述目标函数,执行对所述第一对象的访问;
其中,所述第一函数集合为通过操作***的链接程序进行函数替换得到的函数集合,所述第一函数集合中的函数基于调用对象存储接口调用。
第二方面,本发明实施例提供一种对象访问装置,包括:
接收模块,用于接收对第一对象的访问请求;
确定模块,用于响应于所述访问请求,根据所述访问请求的请求类型,在***函数库中的第一函数集合中确定与所述请求类型对应的目标函数;
执行模块,用于调用所述目标函数,执行对所述第一对象的访问;
其中,所述第一函数集合为通过操作***的链接程序进行函数替换得到的函数集合,所述第一函数集合中的函数基于调用对象存储接口调用。
第三方面,本发明实施例提供一种电子设备,包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现本发明实施例第一方面提供的对象访问方法中的步骤。
上述技术方案中的一个技术方案具有如下优点或有益效果:
本发明实施例提供的对象访问方法、装置及电子设备,其中,所述方法包括:接收对第一对象的访问请求,响应于所述访问请求,根据所述访问请求的请求类型,在***函数库中进行函数替换得到的第一函数集合中确定与所述请求类型对应的目标函数;调用所述目标函数,执行对所述第一对象的访问。通过链接程序的函数替换功能,在通用操作***函数库中可直接实现基于对象存储接口调用对象存储函数库中的函数,而无需专用软件进行转义,缩短了数据传输路径,提高了数据的传输性能。
附图说明
图1为现有技术中的一种对象存储访问方法的流程示意图;
图2为本发明实施例提供的一种对象访问方法的流程示意图;
图3为本发明实施例提供的另一种对象访问方法的流程示意图;
图4为本发明实施例提供的一种对象访问装置的结构图之一;
图5为本发明实施例提供的一种对象访问装置的结构图之二;
图6为本发明实施例提供的一种电子设备的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书中的术语“包括”以及它的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。此外,说明书以及权利要求中使用“和/或”表示所连接对象的至少其中之一,例如A和/或B,表示包含单独A,单独B,以及A和B都存在三种情况。
在本发明实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
为了方便理解,以下对本发明实施例涉及的一些内容进行说明:
S3(Simple Storage Service):S3是一套基于超文本传输协议(Hyper TextTransfer Protocol,HTTP)构建的全球广域网(World Wide Web,Web)存储管理服务,S3定义了一套对象存储标准接口,可提供通过互联网访问的对象存储服务,各个应用软件的后台服务器可以通过调用S3对象存储接口将接收到的用户的视频、图片存储到S3对象存储服务中。
S3标准函数库:又可称为S3函数库,以下称为S3函数库,S3函数库封装了S3对象存储接口的调用过程。由于S3的使用方法不同于通用文件存储***接口的使用方法,因而需要应用软件的程序开发人员专门学习S3函数库和S3对象存储接口的使用方法,然后适应性的开发应用软件的服务器程序。
Glibc:是GNU/Linux操作***发布的Libc库,可以理解为C运行库。Glibc是Linux***中的应用程序接口,几乎其它任何运行库都会依赖于Glibc。Glibc除了封装Linux操作***所提供的***服务外,还可提供许多其它必要功能服务的实现。
Glibc函数库:Glibc函数库封装了文件存储接口的调用过程,可供服务器程序使用文件存储接口来存储视频、图片等文件。由于文件存储历史悠久,几乎伴随着Linux操作***的出现而出现,所以绝大多数程序开发人员能够熟练使用Glibc函数库调用文件存储接口来实现文件存储。
文件存储接口:文件存储***的调用接口。
对象存储接口:对象存储***的调用接口。
S3FS:基于FUSE的文件***接口,支持将对象存储中的bucket以文件形式导出的文件***接口。在Linux操作***中,以S3FS为代表的软件,基于FUSE技术将S3标准函数库封装成文件存储API
现有技术中,在程序开发人员未学习S3对象存储接口的情况下,在Linux操作***中,通过使用以S3FS为代表的软件,基于FUSE技术将S3函数库封装成文件存储接口。这样,程序开发人员通过安装使用S3FS软件,可以仍旧使用Glibc函数库来开发服务器程序,服务器程序通过Glibc函数库访问文件存储接口,S3FS软件再将文件存储接口的调用转换成S3对象存储接口的调用,以实现对象存储访问。如图1所示,上述现有技术的具体实现步骤如下:
步骤101、对服务器程序进行编译。
具体实现时,由编译程序(Compiler)将服务器程序的源代码编译成中央处理器(Central Processing Unit,CPU)可执行的目标代码,生成所述服务器程序对应的若干程序段。
步骤102、将编译后的服务器程序链接Glibc函数库。
具体实现时,由链接程序(Linker)将编译后形成的若干程序段与Glibc函数库链接在一起,形成完整的装入模块(Load Module)。之后,由装入程序(Loader)将装入模块装入物理内存,之后,服务器程序可以运行。
步骤103、服务器程序运行时,接收到对象存储访问请求的情况下,通过Glibc函数库访问文件存储接口。
步骤104、通过S3FS软件将文件存储接口的调用转换成S3对象存储接口的调用。
步骤105、基于S3对象存储接口调用S3函数库中的函数实现对象存储访问。
上述现有技术中,引入了S3FS软件这个转义层,数据经过这个转义层,数据传输路径增长,且数据传输性能也存在一定程度的降低。
请参见图2,图2是本发明实施例提供的一种对象访问方法,本发明实施例的对象访问方法可以应用于应用服务器。
如图2所示,对象访问方法可以包括以下步骤:
步骤201、接收对第一对象的访问请求。
具体实现时,所述第一对象可以理解为第一文件,所述对第一对象的访问请求可以表现为对所述第一文件的访问请求。所述应用服务器可通过接收用户对所述第一对象的访问请求,获取所述访问请求中携带的信息。
具体的,所述访问请求可以携带以下信息:所述访问请求的请求类型和所述访问请求的请求参数。所述访问请求的请求参数与对所述第一对象的请求类型相匹配。当然,所述访问请求所携带的信息并不限于此,在此不作任何限定。
步骤202、响应于所述访问请求,根据所述访问请求的请求类型,在***函数库中的第一函数集合中确定与所述请求类型对应的目标函数;其中,所述第一函数集合为通过操作***的链接程序进行函数替换得到的函数集合,所述第一函数集合中的函数基于调用对象存储接口调用。
具体实现时,应用服务器响应于所述访问请求,可获取所述访问请求的请求类型,根据所述访问请求的请求类型,可以确定对所述第一对象执行何种访问操作,以在操作***函数库中调用对应的函数执行对所述第一对象的访问。
具体的,所述访问请求的请求类型可以包括以下任意一项:创建所述第一对象;删除所述第一对象;读取所述第一对象中的数据;向所述第一对象中写入数据;其他针对第一对象的请求操作。
在本发明实施例中,所述第一函数集合为通过操作***的链接程序进行函数替换得到的函数集合,可以这样理解,所述第一函数集合可以为一个自定义的函数集合,该自定义的函数集合中定义了基于对象存储接口调用的一系列函数。通过操作***链接程序的函数替换功能,在服务器程序链接的过程中,可以使用所述第一函数集合替换操作***函数库中基于文件存储***接口调用的函数集合。
具体实现时,在服务器程序运行的过程中,应用服务器接收到用户对第一对象的访问请求后,需要基于操作***函数库的文件存储接口调用操作***函数库中的函数。基于上述函数替换操作,会实际调用所述第一函数集合中的函数,也就是说,会实际基于对象存储接口调用对象存储函数库中的函数,应用服务器可根据所述访问请求的请求类型在所述第一函数集合中确定对应的目标函数。
步骤203、调用所述目标函数,执行对所述第一对象的访问。
具体实现时,应用服务器可根据所述目标函数的实现逻辑,执行对所述第一对象的访问。
需要说明的是,步骤201至步骤203实现于应用服务器程序的运行时期。
在本发明实施例中,接收对第一对象的访问请求,响应于所述访问请求,根据所述访问请求的请求类型,在***函数库中进行函数替换得到的第一函数集合中确定与所述请求类型对应的目标函数;调用所述目标函数,执行对所述第一对象的访问。通过链接程序的函数替换功能,在通用操作***函数库中可直接实现基于对象存储接口调用对象存储函数库中的函数,而无需专用软件进行转义,缩短了数据传输路径,提高了数据的传输性能。
可选的,在所述接收对第一对象的访问请求之前,所述方法还包括:
获取所述第一函数集合;
根据所述第一函数集合,对应用服务器程序的源代码进行重新编译,生成所述应用服务器程序的程序段;
在所述应用服务器程序的程序段链接操作***函数库的情况下,将所述操作***函数库中的第二函数集合的函数替换为所述第一函数集合的函数,所述第二函数集合中的函数基于文件存储接口调用。
需要说明的是,本可选的实施方式实现于应用服务器程序的编译和链接时期。
具体实现时,获取所述第一函数集合,包括以下任意一种实现形式:接收获取所述第一函数集合;生成获取所述第一函数集合。以下对两种情况进行说明:
第一种、接收获取所述第一函数集合的情况。在本情况中,所述第一函数集合由操作***开发端自定义生成之后,提供给应用服务器。所述应用服务器接收获取所述第一函数集合。
第二种、生成获取所述第一函数集合的情况。在本情况中,所述应用服务器自定义生成所述第一函数集合。
上述自定义生成所述第一函数集合的实现方式如下:
首先自定义一个函数库,并创建该自定义函数库对应的文件,之后自定义一系列函数,这些函数可基于对象存储接口调用对象存储函数库中的函数,最后将这些函数统一写入上述自定义函数库对应的文件中。
在本发明实施例中,应用服务器通过生成获取或者接收获取所述第一函数集合对应的文件之后,可基于所述第一函数集合对源代码进行重新编译,以生成所述应用服务器程序的程序段,之后在连接操作***函数库的过程中,实现函数替换。
具体实现时,将所述操作***函数库中基于文件存储接口调用的函数确定为第二函数集合。在函数替换时,将所述第二函数集合的函数对应替换为所述第一函数集合的函数。示例性的,所述第二函数集合中的文件写入函数可对应替换为第一函数集合中的对象写入函数,所述第一函数集合中的对象写入函数可基于对象存储接口调用对象存储函数库中的对象写入函数。
可选的,所述第一函数集合包括第一函数,所述第二函数集合包括第二函数;
所述将所述***函数库中的第二函数集合替换为所述第一函数集合,包括:
在不改变所述第二函数的名称和参数的情况下,将所述第二函数的业务逻辑替换为所述第一函数的业务逻辑。
具体实现时,在函数替换时,可以不改变第二函数集合中的函数的名称和参数,而将其业务逻辑替换为第一函数集合中对应函数的业务逻辑。
示例性的,以所述第二函数为操作***函数库的write(int fd,const void*buf,size_t count)为例,所述第二函数的业务逻辑可以表现为:获取第一文件的文件名、数据缓冲区Buffer中的数据以及所述数据缓冲区Buffer的大小;将数据缓冲区Buffer中的数据写入第一文件中。
在对所述第一函数集合进行自定义时,所述第一函数可以定义为与write函数同参数的wrap_write(int fd,const void*buf,size_t count),所述第一函数的业务逻辑可以表现为:获取第一文件的文件名、数据缓冲区Buffer中的数据以及所述数据缓冲区Buffer的大小;调用对象存储函数库中的对象写入函数,将数据缓冲区Buffer中的数据写入第一文件中。
在函数替换时,将保持所述第二函数的名称和参数不变的情况下,将所述第二函数的业务逻辑替换为所述第一函数的业务逻辑。这样,在接收到对所述第一对象的写入请求的情况下,响应于所述写入请求,应用服务器可以基于写入函数的名称调用所述第一函数,并执行替换后的业务逻辑。
需要说明的是,所述第一函数可以是所述第一函数集合中的任意一个函数,所述第二函数可以是所述第二函数集合中的任意一个函数。在函数替换时,需要替换操作***函数库中所有可能基于文件存储接口调用的函数。
在本发明实施例中,所述第一函数集合中的函数包括但不限于以下:
1)替换操作***函数库中的文件创建函数create()的函数,该函数的业务逻辑可以表现为:获取第一文件的文件名;基于对象存储接口调用对象存储函数库中的对象创建函数;接收对象存储接口返回的成功或者失败的响应消息。
2)替换操作***函数库中的文件写入函数write()的函数,该函数的业务逻辑可以表现为:获取第一文件的文件名、数据缓冲区Buffer中的数据以及所述数据缓冲区Buffer的大小;基于对象存储接口调用对象存储函数库中的对象写入函数,将数据缓冲区Buffer中的数据写入第一文件中;接收对象存储接口返回的写入数据量大小。
3)替换操作***函数库中的文件读取函数read()的函数,该函数的业务逻辑可以表现为:获取第一文件的文件名以及待读取数据的大小;基于对象存储接口调用对象存储函数库中的对象读取函数,并将读取到的数据写入数据缓冲区Buffer中;接收对象存储接口返回的写入数据量大小。
4)替换操作***函数库中的文件删除函数unlink()的函数,该函数的业务逻辑可以表现为:获取第一文件的文件名;基于对象存储接口调用对象存储函数库中的对象删除函数;接收对象存储接口返回的成功或者失败的响应消息。
可选的,在所述操作***为Linux操作***的情况下,所述操作***函数库为Glibc函数库,所述第二函数集合的函数为Glibc函数库中的基于文件存储接口调用的函数。当然,在其他操作***中,所述第二函数集合的函数也可以是基于该操作***对应的函数库中的基于文件存储接口调用的函数,具体可根据实际情况决定,在此不作任何限定。
可选的,所述第一函数集合为S3函数库。当然,所述第一函数集合也可以是基于其他对象存储标准接口调用的函数库,具体可根据实际情况决定,在此不作任何限定。
为方便理解,以下介绍本发明实施例的一种可选的实施方式:
本实施方式中,所述第二函数集合的函数为Glibc函数库中的基于文件存储接口调用的函数,所述第一函数集合为S3函数库。
请参见图3,图3是本实施方式提供的一种对象访问方法。
如图3所示,所述对象访问方法可以包括以下步骤:
步骤301:根据所述第一函数集合编译服务器程序。
具体实现时,应用服务器先获取同样经过编译的第一函数集合,根据所述第一函数集合对服务器程序适应性的重新编译。
步骤302:将编译后的服务器程序链接Glibc函数库,并进行函数替换。
具体实现时,使用链接程序(Linker)链接Glibc函数库,生成服务器可执行程序。该过程中,使用链接程序(Linker)提供的函数替换功能,将Glibc函数库中基于文件存储接口调用的函数替换成自定义函数,所述自定义函数与所述基于文件存储接口调用的函数同参数,且基于S3对象存储接口调用S3函数库。
步骤303:服务器程序运行时,在接收到用户的对象访问请求的情况下,调用Glibc函数库访问第一函数集合。
具体实现时,在接收到用户的对象访问请求的情况下,应用服务器可基于文件存储接口调用Glibc函数库中的第一函数集合,由于第一函数集合的名称与第二函数集合的名称相同,因此,应用服务器可基于文件存储接口对应的函数访问第一函数集合。
步骤304:执行第一函数集合中的目标函数,基于S3对象存储接口调用S3函数库的函数。
具体实现时,在执行第一函数集合中目标函数的业务逻辑时,会基于S3对象存储接口调用S3函数库的函数以实现对象访问。
下面举例说明上述函数替换过程的实现方式:
以Glibc函数库中用于文件写入的函数——write函数为例,write函数调用命令为ssize_t write(int fd,const void*buf,size_t count),那么,第一函数集合中可以定义一个同参数函数如下:
//下面是自定义的同参数函数
ssize_t__wrap_write(int fd,const void*buf,size_t count)
{
//获得文件名,文件名即是对象名
//调用S3对象存储接口将数据缓冲区buffer中的数据写入对象存储
}
本实施方式中,所述第一函数集合可以命名为libs3wrapper库,上述自定义的wrap_write函数的定义可以写入文件libs3wrapper.c中,而将wrap_write函数收容进所述第一函数集合中。
在服务器程序通过链接程序生成可执行文件的时候,可以通过命令实现对libs3wrapper的引用,完成函数替换,所述命令举例如下:
//自定义函数库需要先编译
gcc-c libs3wrapper.c-o libs3wrapper.o
//编译服务器程序myprogram
gcc-c myprogram.c-o myprogram.o
//链接生成myprogram可执行文件,这里执行对Glibc函数库中的write函数的替换
//Glibc函数库中的write函数会被替换成libs3wrapper中的__wrap_write函数
gcc-Wl,-wrap,write-Wl,-wrap=write libs3wrapper.o mygrogram.o-omyprogram
上述命令中,myprogram指的是服务器程序,通常在链接的时候,会直接链接Glibc函数库,然后myprogram就可以调用Glibc函数库中的write函数。本实施方式中,通过-Wl,-wrap,write-Wl,-wrap=write参数可以执行将Glibc函数库(第二函数集合)中的write函数替换为libs3wrapper库(第一函数集合)中的__wrap_write函数。在myprogram服务器程序运行时,可以直接调用libs3wrapper库中的write函数。
上述只是举例说明函数替换原理,完整的libs3wrapper库中需要重定义所有可能用到的文件存储接口函数,并使用S3对象存储接口来重新实现这些函数的同参数函数。
请参见图4,图4为是本发明实施例提供的一种对象访问装置。
如图4所示,本发明实施例提供的对象访问装置400包括:
接收模块401,用于接收对第一对象的访问请求;
确定模块402,用于响应于所述访问请求,根据所述访问请求的请求类型,在***函数库中的第一函数集合中确定与所述请求类型对应的目标函数;
执行模块403,用于调用所述目标函数,执行对所述第一对象的访问;
其中,所述第一函数集合为通过操作***的链接程序进行函数替换得到的函数集合,所述第一函数集合中的函数基于调用对象存储接口调用。
可选的,如图5所示,对象访问装置400还包括:
获取模块404,用于获取所述第一函数集合;
编译模块405,用于根据所述第一函数集合,对服务器程序的源代码进行重新编译,生成所述服务器程序的程序段;
替换模块406,用于在所述服务器程序的程序段链接操作***函数库的情况下,将所述操作***函数库中的第二函数集合的函数替换为所述第一函数集合的函数,所述第二函数集合中的函数基于文件存储接口调用。
可选的,所述第一函数集合包括第一函数,所述第二函数集合包括第二函数;
替换模块406具体用于:
在不改变所述第二函数的名称和参数的情况下,将所述第二函数的业务逻辑替换为所述第一函数的业务逻辑。
可选的,所述第二函数集合的函数为Glibc函数库中的基于文件存储接口调用的函数。
可选的,所述第一函数集合为S3函数库。
本发明实施例提供的对象访问装置400能够实现图2或图3所示的方法实施例中实现的各个过程,且可以达到相同有益效果,为避免重复,这里不再赘述。
请参见图6,图6是本发明实施例提供的一种电子设备的结构图。
如图6所示,电子设备600包括处理器601、通信接口602、存储器603及通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信。
其中,存储器603用于存放计算机程序。
其中,处理器601用于执行存储器603上所存放的程序时,实现如下步骤:
接收对第一对象的访问请求;
响应于所述访问请求,根据所述访问请求的请求类型,在***函数库中的第一函数集合中确定与所述请求类型对应的目标函数;
调用所述目标函数,执行对所述第一对象的访问;
其中,所述第一函数集合为通过操作***的链接程序进行函数替换得到的函数集合,所述第一函数集合中的函数基于调用对象存储接口调用。
可选的,在所述接收对第一对象的访问请求之前,所述方法还包括:
获取所述第一函数集合;
根据所述第一函数集合,对服务器程序的源代码进行重新编译,生成所述服务器程序的程序段;
在所述服务器程序的程序段链接操作***函数库的情况下,将所述操作***函数库中的第二函数集合的函数替换为所述第一函数集合的函数,所述第二函数集合中的函数基于文件存储接口调用。
可选的,所述第一函数集合包括第一函数,所述第二函数集合包括第二函数;
所述将所述***函数库中的第二函数集合替换为所述第一函数集合,包括:
在不改变所述第二函数的名称和参数的情况下,将所述第二函数的业务逻辑替换为所述第一函数的业务逻辑。
可选的,所述第二函数集合的函数为Glibc函数库中的基于文件存储接口调用的函数。
可选的,所述第一函数集合为S3函数库。
上述电子设备600提到的通信总线604可以是外设部件互连标准(PeripheralComponent Interconnect,简称PCI)总线或扩展工业标准结构(Extended IndustryStandard Architecture,简称EISA)总线等。该通信总线604可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口602用于上述电子设备600与其他设备之间的通信。
存储器603可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器601可以是通用处理器,包括中央处理器(Central ProcessingUnit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例提供一种对象访问方法的步骤。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
Claims (9)
1.一种对象访问方法,其特征在于,所述方法包括:
接收对第一对象的访问请求;
响应于所述访问请求,根据所述访问请求的请求类型,在***函数库中的第一函数集合中确定与所述请求类型对应的目标函数;
调用所述目标函数,执行对所述第一对象的访问;
其中,所述第一函数集合为通过操作***的链接程序进行函数替换得到的函数集合,所述第一函数集合中的函数基于调用对象存储接口调用;
在所述接收对第一对象的访问请求之前,所述方法还包括:
获取所述第一函数集合;
根据所述第一函数集合,对服务器程序的源代码进行重新编译,生成所述服务器程序的程序段;
在所述服务器程序的程序段链接操作***函数库的情况下,将所述操作***函数库中的第二函数集合的函数替换为所述第一函数集合的函数,所述第二函数集合中的函数基于文件存储接口调用。
2.根据权利要求1所述的方法,其特征在于,所述第一函数集合包括第一函数,所述第二函数集合包括第二函数;
所述将所述操作***函数库中的第二函数集合的函数替换为所述第一函数集合的函数,包括:
在不改变所述第二函数的名称和参数的情况下,将所述第二函数的业务逻辑替换为所述第一函数的业务逻辑。
3.根据权利要求1所述的方法,其特征在于,所述第二函数集合的函数为Glibc函数库中的基于文件存储接口调用的函数。
4.根据权利要求1所述的方法,其特征在于,所述第一函数集合为S3函数库。
5.一种对象访问装置,其特征在于,所述装置包括:
接收模块,用于接收对第一对象的访问请求;
确定模块,用于响应于所述访问请求,根据所述访问请求的请求类型,在***函数库中的第一函数集合中确定与所述请求类型对应的目标函数;
执行模块,用于调用所述目标函数,执行对所述第一对象的访问;
其中,所述第一函数集合为通过操作***的链接程序进行函数替换得到的函数集合,所述第一函数集合中的函数基于调用对象存储接口调用;
获取模块,用于获取所述第一函数集合;
编译模块,用于根据所述第一函数集合,对服务器程序的源代码进行重新编译,生成所述服务器程序的程序段;
替换模块,用于在所述服务器程序的程序段链接操作***函数库的情况下,将所述操作***函数库中的第二函数集合的函数替换为所述第一函数集合的函数,所述第二函数集合中的函数基于文件存储接口调用。
6.根据权利要求5所述的装置,其特征在于,所述第一函数集合包括第一函数,所述第二函数集合包括第二函数;
所述替换模块具体用于:
在不改变所述第二函数的名称和参数的情况下,将所述第二函数的业务逻辑替换为所述第一函数的业务逻辑。
7.根据权利要求5所述的装置,其特征在于,所述第二函数集合的函数为Glibc函数库中的基于文件存储接口调用的函数。
8.根据权利要求5所述的装置,其特征在于,所述第一函数集合为S3函数库。
9.一种电子设备,其特征在于,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至4中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011218064.0A CN114443316B (zh) | 2020-11-04 | 2020-11-04 | 一种对象访问方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011218064.0A CN114443316B (zh) | 2020-11-04 | 2020-11-04 | 一种对象访问方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114443316A CN114443316A (zh) | 2022-05-06 |
CN114443316B true CN114443316B (zh) | 2024-06-04 |
Family
ID=81361613
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011218064.0A Active CN114443316B (zh) | 2020-11-04 | 2020-11-04 | 一种对象访问方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114443316B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101523348A (zh) * | 2006-10-02 | 2009-09-02 | 特兰斯蒂有限公司 | 针对程序代码转换处理动态链接的函数调用的方法和设备 |
CN108399223A (zh) * | 2018-02-12 | 2018-08-14 | 北京奇艺世纪科技有限公司 | 一种数据获取方法、装置及电子设备 |
CN111580798A (zh) * | 2020-03-30 | 2020-08-25 | 佛山职业技术学院 | 一种动态链接库实现方法、***、计算机设备及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180113689A1 (en) * | 2016-10-24 | 2018-04-26 | International Business Machines Corporation | Local Function Call Site Optimization |
US10108406B2 (en) * | 2016-10-24 | 2018-10-23 | International Business Machines Corporation | Linking optimized entry points for local-use-only function pointers |
-
2020
- 2020-11-04 CN CN202011218064.0A patent/CN114443316B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101523348A (zh) * | 2006-10-02 | 2009-09-02 | 特兰斯蒂有限公司 | 针对程序代码转换处理动态链接的函数调用的方法和设备 |
CN108399223A (zh) * | 2018-02-12 | 2018-08-14 | 北京奇艺世纪科技有限公司 | 一种数据获取方法、装置及电子设备 |
CN111580798A (zh) * | 2020-03-30 | 2020-08-25 | 佛山职业技术学院 | 一种动态链接库实现方法、***、计算机设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
Hardware Root-of-Trust Based Integrity for Shared Library Function Pointers in Embedded Systems;Gabriela Lopez等;《2019 8th Mediterranean Conference on Embedded Computing (MECO)》;20190715;第1-6页 * |
Linux下动态注入机制的研究与实现;邹能人;《中国优秀硕士学位论文全文数据库 信息科技辑》;20160315;第I138-5236页 * |
Also Published As
Publication number | Publication date |
---|---|
CN114443316A (zh) | 2022-05-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111176626B (zh) | 跨编程语言的代码调用方法及装置、介质、设备 | |
US20090024986A1 (en) | Runtime code modification | |
CN111399840B (zh) | 一种模块开发方法及装置 | |
CN111740948B (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
GB2589658A (en) | Method and apparatus for running an applet | |
TW200937188A (en) | Contract programming for code error reduction | |
CN106775781B (zh) | 减小应用安装包的方法、装置及电子设备 | |
CN111880801A (zh) | 应用程序动态化方法、装置、电子设备 | |
CN111651169B (zh) | 基于web容器的区块链智能合约运行方法及*** | |
CN110058904B (zh) | 数据转移方法、装置及服务器 | |
CN113157274B (zh) | 基于微前端的软件开发方法、装置、电子设备及存储介质 | |
CN111506368A (zh) | 对异步调用转同步调用的方法、装置、设备及存储介质 | |
CN106775916B (zh) | 减小应用安装包的方法、装置及电子设备 | |
CN114490103A (zh) | 一种操作***接口调用方法、装置以及电子设备 | |
CN111367512B (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
CN112764836A (zh) | 运行快应用的方法、装置及电子设备 | |
CN114443316B (zh) | 一种对象访问方法、装置及电子设备 | |
CN116166457A (zh) | 数据处理方法及相关设备 | |
CN113778451B (zh) | 文件加载方法、装置、计算机***和计算机可读存储介质 | |
CN110275710B (zh) | 一种Java本地接口一致性检查方法及***、存储介质及终端 | |
CN108089852B (zh) | 建立属性访问的方法、介质、装置和计算设备 | |
CN110597707A (zh) | 一种内存越界故障检测方法及终端设备 | |
US20040216140A1 (en) | Method and system for accessing system operations through an interface layer | |
CN113535566B (zh) | 一种安卓应用校验方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |