![如何使虚拟应用程序在不更改代码的情况下读取 gzip 文件(即时)](https://linux22.com/image/9878/%E5%A6%82%E4%BD%95%E4%BD%BF%E8%99%9A%E6%8B%9F%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%9C%A8%E4%B8%8D%E6%9B%B4%E6%94%B9%E4%BB%A3%E7%A0%81%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E8%AF%BB%E5%8F%96%20gzip%20%E6%96%87%E4%BB%B6%EF%BC%88%E5%8D%B3%E6%97%B6%EF%BC%89.png)
我正在寻找一个通用工具/库,它可以覆盖操作系统的 fopen 函数,以便在运行时无缝读取 gz 文件,而无需修改应用程序。
详细信息:我有一个读取大型二进制文件的旧应用程序。这些二进制文件的压缩效果与 gz 一样好。我正在考虑压缩这些二进制文件并保留原始文件扩展名(根据遗留应用程序的要求)并使用拦截和覆盖系统调用的库或应用程序以支持读取压缩文件而不对应用程序代码进行任何更改,并且无需完全解压缩。此外,进行整体文件系统压缩也不适用,因为它会降低其他 HPC 应用程序的性能。我只需要压缩旧应用程序读取的特定二进制文件,并添加对这些应用程序的支持来读取这些压缩文件,而不需要对源代码进行任何更改。
有什么可以做这样的事情吗?我不关心可移植性,只要它在我的 Linux 发行版 (RHEL 6) 中运行良好即可
答案1
答案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 软件包。