如何使虚拟应用程序在不更改代码的情况下读取 gzip 文件(即时)

如何使虚拟应用程序在不更改代码的情况下读取 gzip 文件(即时)

我正在寻找一个通用工具/库,它可以覆盖操作系统的 fopen 函数,以便在运行时无缝读取 gz 文件,而无需修改应用程序。

详细信息:我有一个读取大型二进制文件的旧应用程序。这些二进制文件的压缩效果与 gz 一样好。我正在考虑压缩这些二进制文件并保留原始文件扩展名(根据遗留应用程序的要求)并使用拦截和覆盖系统调用的库或应用程序以支持读取压缩文件而不对应用程序代码进行任何更改,并且无需完全解压缩。此外,进行整体文件系统压缩也不适用,因为它会降低其他 HPC 应用程序的性能。我只需要压缩旧应用程序读取的特定二进制文件,并添加对这些应用程序的支持来读取这些压缩文件,而不需要对源代码进行任何更改。

有什么可以做这样的事情吗?我不关心可移植性,只要它在我的 Linux 发行版 (RHEL 6) 中运行良好即可

答案1

另一种可能性可能是使用一些专门的文件系统。也许是一个保险丝文件系统(例如保险丝BGZIP)正在执行压缩的可以做到这一点,并且您可以调整它以仅透明地压缩您想要的几个文件(例如,使用一些覆盖文件系统)。

也可以看看问题(ext4 的透明压缩)。

答案2

兹库似乎它可以做你想做的事。这是 debian 包中的描述等:

Package: zlibc
Version: 0.9k-4.3
Depends: libc6 (>= 2.2.5)
Description-en: An on-fly auto-uncompressing C library
 Zlibc is a preloadable shared library that allows executables to
 uncompress the data files that they need on the fly. No kernel patch,
 no recompilation of these executables and no recompilation of the
 libraries is needed.
Homepage: http://zlibc.linux.lu/

我不知道它的工作效果如何,或者它是否仍在维护,或者是否有它的 RHEL6 软件包。

相关内容