C - 将大量文件存储为单个资源

Cho*_*tle 5 c linux file

如果对这个问题有明显的答案,请原谅我; 我没有找到它,因为我不完全确定我在寻找什么.这可能是重复的一个我没有找到的问题; 抱歉.

我有一个C可执行文件,它使用文本,音频,视频,图标和各种不同的文件类型.这些文件存储在本地; 文件夹结构很大而且很深,需要与应用程序一起安装才能正常运行(不是我预计它会被分发我想要为了方便而打包我自己的工作).

在我看来,如果文件库存储在单个文件中会更方便,例如在应用程序旁边/usr/bin/APPLICATION或在最合适的位置可以访问; 必要时由可执行文件访问.

我搜索了类似的问题,并找到了一些建议,指出了两个可能的选项资源文件,它们似乎是Windows的原生文件,包括编译时的文件.第一个问题导致类似于第二个问题的答案,并没有回答有关Linux可执行文件的资源文件存在的问题.它(像第二个)在编译过程中查看包含数据文件.这不是很有用,因为我只想更新我的资源,我不得不重新编译整个应用程序(媒体是动态添加的).

问题:有没有办法将各种文件类型存储在linux中可执行文件可访问的单个文件中,如果是这样,您将如何实现?

我最初的想法是创建一个.zip.gz文件,它也可能提供压缩作为额外的奖励,但我不知道如何(或者甚至可能)动态访问这样的文件中的数据.我同样不确定是否有特定的文件类型或库提供更合适的解决方案.另外我知道几乎没有关于.dat文件的内容可以在这个上下文中用于linux系统吗?

Nom*_*mal 3

我根本不明白你为什么要使用单个文件。考虑到文件提取的复杂性增加(以及错误潜入的可能性增加)和相关的开销,我不认为它会“更方便”。

我有一个 C 可执行文件,它使用文本、音频、视频、图标和各种不同的文件类型。

许多其他 Linux 应用程序也是如此。使用包管理时,通常的方法是将应用程序的体系结构独立数据(图标、音频、视频等)放入/usr/bin/YOURAPP/usr/share/YOURAPP/,将体系结构相关数据(如帮助程序二进制文件)放入 中/usr/lib/YOURAPP。后两者是完整的目录树是非常常见的,有时非常深和宽。

对于本地编译的东西,通常将它们放在/usr/local/bin/YOURAPP, /usr/local/share/YOURAPP/,/usr/local/share/YOURAPP/中,只是为了避免混淆包管理器。(如果您检查./configure脚本或读取Makefile,这就是它们支持的变量的主要目的PREFIX。)

也很常见的是/usr/bin/YOURAPP一个简单的 shell 脚本,设置环境变量或检查特定于用户的覆盖(来自$HOME/.YOURAPP/),以 结尾exec /usr/lib/YOURAPP/YOURAPP.bin [parameters...],它用实际的二进制可执行文件替换 shell,而不将 shell 保留在内存中。

例如,/usr/share/octave/在我的机器上总共包含 138 个目录(在最多 7 个目录深的层次结构中)和 1463 个文件;总共大约有十兆字节的“东西”。LibreOffice、Eagle、Fritzing 和 KiCAD 各自占用数百兆字节,因此 Octave 无论如何都不是一个极端的例子。