我正在开发一个没有文件系统的嵌入式系统,我需要执行从通过命令(如参数)指定的文件或直接从标准输入指定的文件中获取输入数据的程序。
我知道可以使用此答案中的方法用二进制文件烘焙文件数据:C/C++ with GCC:静态地将资源文件添加到可执行文件/库 https://stackoverflow.com/questions/4864866/c-c-with-gcc-statically-add-resource-files-to-executable-library但目前我需要重写所有程序才能以新的方式访问数据。
例如,是否可以烘焙一个文本文件,并在运行程序时使用指向 stdin 的假文件指针来访问它?
如果您的系统是无操作系统的裸机系统,那么您的 C 库将具有“重定向”存根或挂钩,您需要实现这些存根或挂钩才能将库挂接到平台中。这通常包括低级 I/O 功能,例如open()
、读()、写()、seek()
您可以像您希望实现基本的 stdin、stdout、stderr 流一样实现这些(在 POSIX 和大多数其他实现中,它们分别具有固定的文件描述符 0、1 和 2,并且不需要显式打开)、文件I/O,在本例中用于管理任意内存块。
open()
例如将传递一个文件或设备名称(该字符串可以以您希望的任何方式解释),并将返回一个文件描述符。您可能会将“cfgdata:”识别为访问“内存文件”的设备名称,并且您将返回一个唯一的描述符,然后将其传递给read()
。您使用描述符来引用用于管理流的数据;可能比读取字符时按数字递增的索引多一点。相同的索引可以直接设置seek()
执行。
一旦您实现了这些函数,更高级别的 stdio 函数甚至 C++ iostream 将在您的低级别实现中支持的设备或文件系统上正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)