我正在开发一个没有文件系统的嵌入式系统,我需要执行一些程序,这些程序可以通过命令(比如参数)或直接从stdin获取指定文件中的输入数据。
我知道可以使用这个答案中的方法在文件中使用二进制文件数据:C/C++与GCC:静态地向可执行文件/库添加资源文件,但是目前我需要重写所有的程序来以一种新的方式访问数据。
例如,是否可以在运行程序时使用指向stdin的假文件指针来烘焙文本文件并访问它?
发布于 2015-02-27 17:49:36
如注释所示,您可以使用POSIX fmemopen函数。您将需要一个libc提供它,例如musl-libc或可能的滑翔。顺便说一句,出于基准测试的目的,您可以在硬件上安装一些类似Linux的小型操作系统,例如uclinux。
发布于 2015-02-27 19:33:54
如果您的系统是一个没有操作系统的裸金属系统,那么您的C库将有“重定向”存根或钩子,您需要实现这些存根或钩子来将库连接到平台上。这通常包括低级别的I/O函数,如open()、read()、write()、seek()等。您可以实现这些函数,以实现基本的stdin、stdout、stderr流(在POSIX和大多数其他实现中,它们将分别具有固定的文件描述符0、1和2,不需要显式打开)、文件I/O以及在这种情况下用于管理任意内存块。
例如,open()将被传递一个文件或设备名称(字符串可以以任何方式解释),并返回一个文件描述符。您可能会识别"cfgdata:“作为访问”内存文件“的设备名称,然后返回一个惟一的描述符,然后传递到read()中。您可以使用描述符来引用用于管理流的数据;如果字符读取,则索引可能会增加多少。相同的索引可以由seek()实现直接设置。
一旦实现了这些函数,较高级别的stdio函数甚至C++ iostreams将正常工作于您在低级别实现中支持的设备或文件系统。
https://stackoverflow.com/questions/28770964
复制相似问题