CN114253523A - 读取裸设备的方法、装置、计算机设备和介质 - Google Patents
读取裸设备的方法、装置、计算机设备和介质 Download PDFInfo
- Publication number
- CN114253523A CN114253523A CN202111551867.2A CN202111551867A CN114253523A CN 114253523 A CN114253523 A CN 114253523A CN 202111551867 A CN202111551867 A CN 202111551867A CN 114253523 A CN114253523 A CN 114253523A
- Authority
- CN
- China
- Prior art keywords
- file
- programming language
- dynamic library
- bare
- reading
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本公开涉及一种读取裸设备的方法、装置、计算机设备和介质;其中,该方法包括:将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件;根据第二编程语言,对动态库文件进行封装,得到封装后的文件,其中,第二编程语言和第一编程语言不相同;根据动态库文件和封装后的文件对裸设备进行读取,得到对应的数据。本公开实施例通过第一编程语言和第二程语言的联合使用,无需借助其他设备,能够直接对裸设备进行读取。
Description
技术领域
本公开涉及数据同步技术领域,尤其涉及一种读取裸设备的方法、装置、计算机设备和介质。
背景技术
裸设备是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备,它由应用程序负责对它进行读写操作,不经过文件系统的缓冲。因此,对于读写频繁的数据库应用来说,使用裸设备可以极大地提高数据库系统的性能。
Java是一种相对比较高级的编程语言,针对输入/输出(Input/Output,简称I/O)操作,提供了比较完善的封装,便于上层应用对文件的读写。由于Java中针对底层磁盘的读取都是基于文件封装的,没有提供直接读取裸设备中物理磁盘扇区的能力,这就使得利用Java语言访问物理磁盘扇区的应用程序(或者产品)的实现变得困难。
发明内容
为了解决上述技术问题,本公开提供了一种读取裸设备的方法、装置、计算机设备和介质。
第一方面,本公开提供了一种读取裸设备的方法,包括:
将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件;
根据第二编程语言,对所述动态库文件进行封装,得到封装后的文件,其中,所述第二编程语言和所述第一编程语言不相同;
根据所述动态库文件和所述封装后的文件对所述裸设备进行读取,得到对应的数据。
可选的,所述将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件,包括:
确定操作系统的类型;
根据所述类型确定所述根据第一编程语言编写的针对裸设备的操作函数文件对应的编译工具;
根据所述编译工具将所述操作函数文件进行编译,得到对应的动态库文件。
可选的,所述根据第二编程语言,对所述动态库文件进行封装,得到封装后的文件,包括:
加载所述动态库文件;
确定所述动态库文件中与所述操作函数文件中包括的函数所对应的各目标函数;
根据第二编程语言,对每个目标函数进行封装,得到所述封装后的文件。
可选的,所述将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件之前,还包括:
获取所述根据第一编程语言编写的针对裸设备的操作函数文件。
可选的,所述操作函数文件中包括对齐函数,所述对齐函数用于将分配的内存空间的字节数与所述裸设备的磁盘扇区的大小进行对齐。
可选的,所述根据所述动态库文件和所述封装后的文件对所述裸设备进行读取,得到对应的数据,包括:
将所述封装后的文件编译成对应的类文件;
将所述类文件与所述动态库文件进行打包,得到打包后的文件;
通过所述打包后的文件对所述裸设备进行读取,得到对应的数据。
可选的,所述第一编程语言为Java时,所述操作函数文件基于Java本地接口JNI方式或者Java本地访问JNA方式进行编写得到。
第二方面,本公开提供了一种读取裸设备的装置,包括:
编译模块,用于将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件;
封装模块,用于根据第二编程语言,对所述动态库文件进行封装,得到封装后的文件,其中,所述第二编程语言和所述第一编程语言不相同;
读取模块,用于根据所述动态库文件和所述封装后的文件对所述裸设备进行读取,得到对应的数据。
可选的,编译模块,具体用于:
确定操作系统的类型;
根据所述类型确定所述根据第一编程语言编写的针对裸设备的操作函数文件对应的编译工具;
根据所述编译工具将所述操作函数文件进行编译,得到对应的动态库文件。
可选的,封装模块,具体用于:
加载所述动态库文件;
确定所述动态库文件中与所述操作函数文件中包括的函数所对应的各目标函数;
根据第二编程语言,对每个目标函数进行封装,得到所述封装后的文件。
可选的,上述装置还包括:
获取模块,具体用于:将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件之前,获取所述根据第一编程语言编写的针对裸设备的操作函数文件。
可选的,所述操作函数文件中包括对齐函数,所述对齐函数用于将分配的内存空间的字节数与所述裸设备的磁盘扇区的大小进行对齐。
可选的,读取模块,具体用于:
将所述封装后的文件编译成对应的类文件;
将所述类文件与所述动态库文件进行打包,得到打包后的文件;
通过所述打包后的文件对所述裸设备进行读取,得到对应的数据。
可选的,所述第一编程语言为Java时,所述操作函数文件基于Java本地接口JNI方式或者Java本地访问JNA方式进行编写得到。
第三方面,本公开还提供了一种计算机设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本公开实施例中的任一种所述的读取裸设备的方法。
第四方面,本公开还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开实施例中的任一种所述的读取裸设备的方法。
本公开实施例提供的技术方案与现有技术相比具有如下优点:将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件;根据第二编程语言,对动态库文件进行封装,得到封装后的文件,其中,第二编程语言和第一编程语言不相同;根据动态库文件和封装后的文件对裸设备进行读取,得到对应的数据,通过第一编程语言和第二程语言的联合使用,无需借助其他设备,能够直接对裸设备进行读取。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例提供的一种读取裸设备的方法的流程示意图;
图2是本公开实施例提供的另一种读取裸设备的方法的流程示意图;
图3是本公开实施例提供的一种读取裸设备的装置的结构示意图;
图4是本公开实施例提供的一种计算机设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
图1是本公开实施例提供的一种读取裸设备的方法的流程示意图。本实施例可适用于通过第二编程语言无法对裸设备直接进行读取的情况。本实施例方法可由读取裸设备的装置来执行,该装置可采用硬件/或软件的方式来实现,并可配置于计算机设备中。如图1所示,该方法具体包括如下:
S110,将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件。
其中,第一编程语言可以理解为能够直接对裸设备进行读取的编程语言,例如C语言或者汇编语言等,本实施例不做具体限制。裸设备可以理解为一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。操作函数文件可以理解为能够对裸设备进行操作的通过第一编程语言编写的文件。第二编程语言可以理解为无法直接对裸设备进行读取的编程语言,并且第二编程语言与第一编程语言不相同,例如,第二编程语言可以为Java或者其他编程语言,本实施例不做具体限制。库文件可以理解为计算机上的一类文件,提供给使用者一些开箱即用的变量、函数或类。动态库文件可以理解为在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用的库文件,其优点为:使用动态库文件时只需载入一次,不同的程序可以得到内存中相同的动态库的副本,能够节省内存,并且使用动态库有利于模块化更新程序。
当通过第二编程语言无法对裸设备直接进行读取,也不想借用其他设备进行辅助时,通过第一编程语言能够构造第二编程语言对裸设备进行读取的桥梁,此时需要将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,编译的过程可以通过编译工具或者其他编译方法进行,本实施例对编译工具或者编译方法不做具体限制。对操作函数文件进行编译之后,就得到了与操作函数文件对应的动态库文件。
S120,根据第二编程语言,对动态库文件进行封装,得到封装后的文件,其中,第二编程语言和第一编程语言不相同。
其中,封装的方式可以为现有技术中常用的,本实施例不做具体限制。
由于第二编程语言针对底层磁盘的读取是基于文件封装的,没有提供直接读取裸设备的能力,因此在得到动态库文件之后,根据第二编程语言,对动态库文件进行封装,能够得到封装后的文件,便于后续第二编程语言能够对封装后的文件进行读取。
S130,根据动态库文件和封装后的文件对裸设备进行读取,得到对应的数据。
在得到动态库文件和封装后的文件之后,根据动态库文件和封装后的文件就能够对裸设备进行读取,得到裸设备中对应的数据。
示例性的,下面为对裸设备进行读取的一个示例:
//获取一个SectorReader对象(java)
SectorReader sr=new SectorReader(裸设备的路径,每次读取的大小);
//设置需要读取的偏移量(可选)
sr.seek(偏移量);
//读取裸设备的内容
sr.nextChunk();
//关闭裸设备,停止读取
sr.close();
在本实施例中,将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件;根据第二编程语言,对动态库文件进行封装,得到封装后的文件,其中,第二编程语言和第一编程语言不相同;根据动态库文件和封装后的文件对裸设备进行读取,得到对应的数据,通过第一编程语言和第二程语言的联合使用,无需借助其他设备,能够直接对裸设备进行读取。
在本实施例中,可选的,所述将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件之前,还可以具体包括:
获取所述根据第一编程语言编写的针对裸设备的操作函数文件。
具体的,在将根据第一编程语言编写的针对裸设备的操作函数文件进行编译之前,还需要获取根据第一编程语言编写的针对裸设备的操作函数文件,该操作函数文件可以为开发人员预先编写好的,也可以视具体情况而定,本实施例不做具体限制。
本实施例中,通过获取根据第一编程语言编写的针对裸设备的操作函数文件,便于后续编译过程的顺利进行。
在本实施例中,可选的,所述操作函数文件中包括对齐函数,所述对齐函数用于将分配的内存空间的字节数与所述裸设备的磁盘扇区的大小进行对齐。
其中,对齐函数可以为aligned_malloc函数,本实施例不做具体限制。
具体的,操作函数文件中可以包括多个函数,由于裸设备在读取时是基于一个个的磁盘扇区进行读取的,即以一个磁盘扇区的大小为单位进行读取,因此在将磁盘扇区中读取到的数据存储至分配的内存空间时,内存空间的起始字节应该为磁盘扇区的大小的整数倍,否则可能会导致存储失败。此时,通过对齐函数能够将分配的内存空间的字节数与裸设备的磁盘扇区的大小进行对齐。
本实施例中,通过对齐函数能够保证将磁盘扇区中读取到的数据存储至分配的内存空间中,防止存储失败。
在本实施例中,可选的,所述操作函数文件中还可以包括如下函数:
1、Java_com_kingbase_rawdevice_SectorReader__1open
打开裸设备的函数
2、Java_com_kingbase_rawdevice_SectorReader__1get_1sector_1size获取裸设备的磁盘扇区大小的函数
3、Java_com_kingbase_rawdevice_SectorReader__1seek
在裸设备中快速定位,设置读取的位置的函数
4、Java_com_kingbase_rawdevice_SectorReader__1offset
返回当前裸设备读取的位置的函数
5、Java_com_kingbase_rawdevice_SectorReader__1read
读取裸设备的函数
6、Java_com_kingbase_rawdevice_SectorReader__1close
关闭裸设备的函数
本实施例中,通过上述函数能够便于对裸设备进行操作。
在本实施例中,可选的,所述第一编程语言为Java时,所述操作函数文件基于Java本地接口JNI方式或者Java本地访问JNA方式进行编写得到。
其中,Java本地接口(Java Native Interface,简称JNI)标准从Java1.1开始成为java平台的一部分,它允许Java代码和其他编程语言编写的代码进行交互。Java本地访问(Java Native Access,简称JNA)可以理解为一种建立在JNI技术之上的Java开源框架,它提供了一组Java工具类用于在运行期动态访问系统本地库(Native Library),如Windows的dll或者Linux的so等,同时不需要编写Native或者JNI代码。
具体的,当第一编程语言为Java时,操作函数文件可以基于JNI方式或者JNA方式进行编写得到。JNI方式在编写操作函数文件时需要遵守JNI标准,函数构造可能较复杂。JNA方式在编写操作函数文件时,开发人员在一个java接口中描述目标Native Library的函数与结构,JNA将自动实现Java接口到Native Function(本地函数)的映射。
本实施例中,基于JNI方式或者JNA方式编写操作函数文件,能够实现对底层裸设备的读取,然后通过第二编程语言进行调用,有利于后续间接的让第二编程语言支持原本不支持的裸设备读取能力。
图2是本公开实施例提供的另一种读取裸设备的方法的流程示意图。本实施例是在上述实施例的基础上进行优化。可选的,本实施例对得到对应的动态库文件的过程进行详细的解释说明。如图2所示,该方法具体包括如下:
S210,确定操作系统的类型。
其中,操作系统可以为Linux或者Windows等,本实施例不做具体限制。
由于操作系统的类型不同时,对应的编译工具不同,因此,需要确定操作系统的类型。
S220,根据类型确定根据第一编程语言编写的针对裸设备的操作函数文件对应的编译工具。
根据操作系统的类型能够确定与操作函数文件对应的编译工具,例如,当操作系统为Linux时,对应的编译工具可以为GNU编译器套件(GNU Compiler Collection,简称GCC);又如,当操作系统为Windows时,对应的编译工具可以为Microsoft Visual C/C++(MSVC)编译器、跨平台安装(Cross Platform Make,简称CMake)编译器或者其他编译器等,本实施例对编译器不做具体限制。
S230,根据编译工具将操作函数文件进行编译,得到对应的动态库文件。
在确定了与操作系统的类型对应的编译工具之后,根据编译工具将操作函数文件进行编译,就能够得到对应的动态库文件。相应的,若操作系统为Linux,则得到的动态库文件使用.so为后缀,底层的硬件可以包括X86、龙芯、飞腾、鲲鹏、兆芯以及海光等处理器;若操作系统为Windows,则得到的动态库文件使用.dll为后缀,硬件可以为X86,本实施例对硬件不做具体限制。
S240,根据第二编程语言,对动态库文件进行封装,得到封装后的文件,其中,第二编程语言和第一编程语言不相同。
S250,根据动态库文件和封装后的文件对裸设备进行读取,得到对应的数据。
在本实施例中,确定操作系统的类型;根据类型确定根据第一编程语言编写的针对裸设备的操作函数文件对应的编译工具;根据编译工具将操作函数文件进行编译,得到对应的动态库文件;根据第二编程语言,对动态库文件进行封装,得到封装后的文件,其中,第二编程语言和第一编程语言不相同;根据动态库文件和封装后的文件对裸设备进行读取,得到对应的数据,通过操作系统的类型确定对应的编译工具,根据编译工具对操作函数文件进行编译,能够保证编译过程的顺利进行,提高编译的通过率,以及通过第一编程语言和第二程语言的联合使用,无需借助其他设备,能够直接对裸设备进行读取,节省资源。
在本实施例中,可选的,所述根据第二编程语言,对所述动态库文件进行封装,得到封装后的文件,可以具体包括:
加载所述动态库文件;
确定所述动态库文件中与所述操作函数文件中包括的函数所对应的各目标函数;
根据第二编程语言,对每个目标函数进行封装,得到所述封装后的文件。
其中,目标函数中可以理解为动态库文件中与操作函数文件中包括的函数所对应的函数。
本实施例中,由于第二编程语言针对底层磁盘的读取是基于文件封装的,没有提供直接读取裸设备的能力,因此在得到动态库文件之后,需要确定动态库文件中包括的函数,具体通过加载动态库文件,并确定动态库文件中与操作函数文件中包括的函数所对应的各目标函数,各目标函数即为需要进行封装的各函数。在得到各目标函数之后,根据第二编程语言,对每个目标函数进行封装,就能够得到封装后的文件,通过上述方式进行封装,便于后续的调用。
在本实施例中,可选的,所述根据所述动态库文件和所述封装后的文件对所述裸设备进行读取,得到对应的数据,可以具体包括:
将所述封装后的文件编译成对应的类文件;
将所述类文件与所述动态库文件进行打包,得到打包后的文件;
通过所述打包后的文件对所述裸设备进行读取,得到对应的数据。
本实施例中,在得到封装后的文件之后,将封装后的文件编译成对应的类(Class)文件,然后将类文件与动态库文件进行打包,得到打包后的文件,该打包后的文件可以为jar包格式,也可以为其他格式,本实施例不做具体限制。通过打包后的文件对裸设备进行读取,得到对应的数据,上述方法更方便高效,有利于提高用户的使用体验,简化操作流程。
图3是本公开实施例提供的一种读取裸设备的装置的结构示意图;该装置配置于计算机设备中,可实现本申请任意实施例所述的读取裸设备的方法。该装置具体包括如下:
编译模块310,用于将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件;
封装模块320,用于根据第二编程语言,对所述动态库文件进行封装,得到封装后的文件,其中,所述第二编程语言和所述第一编程语言不相同;
读取模块330,用于根据所述动态库文件和所述封装后的文件对所述裸设备进行读取,得到对应的数据。
在本实施例中,可选的,编译模块310,具体用于:
确定操作系统的类型;
根据所述类型确定所述根据第一编程语言编写的针对裸设备的操作函数文件对应的编译工具;
根据所述编译工具将所述操作函数文件进行编译,得到对应的动态库文件。
在本实施例中,可选的,封装模块320,具体用于:
加载所述动态库文件;
确定所述动态库文件中与所述操作函数文件中包括的函数所对应的各目标函数;
根据第二编程语言,对每个目标函数进行封装,得到所述封装后的文件。
在本实施例中,可选的,上述装置还包括:
获取模块,具体用于:将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件之前,获取所述根据第一编程语言编写的针对裸设备的操作函数文件。
在本实施例中,可选的,所述操作函数文件中包括对齐函数,所述对齐函数用于将分配的内存空间的字节数与所述裸设备的磁盘扇区的大小进行对齐。
在本实施例中,可选的,读取模块330,具体用于:
将所述封装后的文件编译成对应的类文件;
将所述类文件与所述动态库文件进行打包,得到打包后的文件;
通过所述打包后的文件对所述裸设备进行读取,得到对应的数据。
在本实施例中,可选的,所述第一编程语言为Java时,所述操作函数文件基于Java本地接口JNI方式或者Java本地访问JNA方式进行编写得到。
通过本公开实施例提供的读取裸设备的装置,将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件;根据第二编程语言,对动态库文件进行封装,得到封装后的文件,其中,第二编程语言和第一编程语言不相同;根据动态库文件和封装后的文件对裸设备进行读取,得到对应的数据,通过第一编程语言和第二程语言的联合使用,无需借助其他设备,能够直接对裸设备进行读取。
本公开实施例所提供的读取裸设备的装置可执行本公开任意实施例所提供的读取裸设备的方法,具备执行方法相应的功能模块和有益效果。
图4是本公开实施例提供的一种计算机设备的结构示意图。如图4所示,该计算机设备包括处理器410和存储装置420;计算机设备中处理器410的数量可以是一个或多个,图4中以一个处理器410为例;计算机设备中的处理器410和存储装置420可以通过总线或其他方式连接,图4中以通过总线连接为例。
存储装置420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本公开实施例中的读取裸设备的方法对应的程序指令/模块。处理器410通过运行存储在存储装置420中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现本公开实施例所提供的读取裸设备的方法。
存储装置420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本实施例提供的一种计算机设备可用于执行上述任意实施例提供的读取裸设备的方法,具备相应的功能和有益效果。
本公开实施例还提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于实现本公开实施例所提供的读取裸设备的方法。
当然,本公开实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本公开任意实施例所提供的读取裸设备的方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本公开可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述的方法。
值得注意的是,上述读取裸设备的装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本公开的保护范围。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种读取裸设备的方法,其特征在于,所述方法包括:
将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件;
根据第二编程语言,对所述动态库文件进行封装,得到封装后的文件,其中,所述第二编程语言和所述第一编程语言不相同;
根据所述动态库文件和所述封装后的文件对所述裸设备进行读取,得到对应的数据。
2.根据权利要求1所述的方法,其特征在于,所述将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件,包括:
确定操作系统的类型;
根据所述类型确定所述根据第一编程语言编写的针对裸设备的操作函数文件对应的编译工具;
根据所述编译工具将所述操作函数文件进行编译,得到对应的动态库文件。
3.根据权利要求1所述的方法,其特征在于,所述根据第二编程语言,对所述动态库文件进行封装,得到封装后的文件,包括:
加载所述动态库文件;
确定所述动态库文件中与所述操作函数文件中包括的函数所对应的各目标函数;
根据第二编程语言,对每个目标函数进行封装,得到所述封装后的文件。
4.根据权利要求1所述的方法,其特征在于,所述将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件之前,还包括:
获取所述根据第一编程语言编写的针对裸设备的操作函数文件。
5.根据权利要求4所述的方法,其特征在于,所述操作函数文件中包括对齐函数,所述对齐函数用于将分配的内存空间的字节数与所述裸设备的磁盘扇区的大小进行对齐。
6.根据权利要求1所述的方法,其特征在于,所述根据所述动态库文件和所述封装后的文件对所述裸设备进行读取,得到对应的数据,包括:
将所述封装后的文件编译成对应的类文件;
将所述类文件与所述动态库文件进行打包,得到打包后的文件;
通过所述打包后的文件对所述裸设备进行读取,得到对应的数据。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述第一编程语言为Java时,所述操作函数文件基于Java本地接口JNI方式或者Java本地访问JNA方式进行编写得到。
8.一种读取裸设备的装置,其特征在于,所述装置包括:
编译模块,用于将根据第一编程语言编写的针对裸设备的操作函数文件进行编译,得到对应的动态库文件;
封装模块,用于根据第二编程语言,对所述动态库文件进行封装,得到封装后的文件,其中,所述第二编程语言和所述第一编程语言不相同;
读取模块,用于根据所述动态库文件和所述封装后的文件对所述裸设备进行读取,得到对应的数据。
9.一种计算机设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111551867.2A CN114253523A (zh) | 2021-12-17 | 2021-12-17 | 读取裸设备的方法、装置、计算机设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111551867.2A CN114253523A (zh) | 2021-12-17 | 2021-12-17 | 读取裸设备的方法、装置、计算机设备和介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114253523A true CN114253523A (zh) | 2022-03-29 |
Family
ID=80792793
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111551867.2A Pending CN114253523A (zh) | 2021-12-17 | 2021-12-17 | 读取裸设备的方法、装置、计算机设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114253523A (zh) |
-
2021
- 2021-12-17 CN CN202111551867.2A patent/CN114253523A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10367822B2 (en) | Restrictive access control for modular reflection | |
CN111770113B (zh) | 一种执行智能合约的方法、区块链节点和节点设备 | |
WO2020173128A1 (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
EP3350696B1 (en) | Overriding a migrated method of an updated type | |
US11249758B2 (en) | Conditional branch frame barrier | |
WO2022033229A1 (zh) | 一种软件代码编译方法及系统 | |
US10606614B2 (en) | Container-based language runtime using a variable-sized container for an isolated method | |
US10417024B2 (en) | Generating verification metadata and verifying a runtime type based on verification metadata | |
WO2024045379A1 (zh) | 编译方法和编译器、Wasm虚拟机 | |
CN109670299A (zh) | 一种创建Python沙盒环境的方法及电子设备 | |
CN106909441B (zh) | 一种基于jvm的磁盘直接i/o访问的方法 | |
US20180268158A1 (en) | Identifying permitted illegal access operations in a module system | |
US20140222410A1 (en) | Hybrid emulation and kernel function processing systems and methods | |
US10394610B2 (en) | Managing split packages in a module system | |
CN114253523A (zh) | 读取裸设备的方法、装置、计算机设备和介质 | |
KR100478463B1 (ko) | 응용 프로그램의 동적링크 방법 | |
US11726786B2 (en) | Lazy copying of runtime-managed stack frames | |
CN116909652A (zh) | 一种启动WebAssembly程序的方法、计算机设备及存储介质 | |
Vitek | VIRTUAL EXECUTION ENVIRONMENTS | |
WO2017034652A1 (en) | Restrictive access control for modular reflection |
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 |