gpt4 book ai didi

c - 是否可以在 C 中伪造文件流,例如 stdin?

转载 作者:太空狗 更新时间:2023-10-29 15:26:20 28 4
gpt4 key购买 nike

我在没有文件系统的嵌入式系统上工作,我需要执行程序,这些程序从通过命令(如参数)或直接从标准输入指定的文件中获取输入数据。

我知道可以使用此答案中的方法将文件数据与二进制文件一起烘焙:C/C++ with GCC: Statically add resource files to executable/library但目前我需要重写所有程序才能以新方式访问数据。

例如,是否可以内置一个文本文件,并在运行程序时使用指向 stdin 的假文件指针访问它?

最佳答案

如果您的系统是无操作系统的裸机系统,那么您的 C 库将具有“重定向” stub 或 Hook ,您需要实现这些 stub 或 Hook 才能将库挂接到平台。这通常包括低级 I/O 函数,例如 open()、read()、write()、seek() 等。您可以根据需要实现这些函数希望实现基本的 stdin、stdout、stderr 流(在 POSIX 和大多数其他实现中,它们将分别具有固定的文件描述符 0、1 和 2,并且不需要显式打开)、文件 I/O,在这种情况下用于管理任意内存块。

open() 例如将被传递一个文件或设备名称(该字符串可以按您希望的任何方式解释),并将返回一个文件描述符。您可能将“cfgdata:”识别为访问“内存文件”的设备名称,并且您将返回一个唯一的描述符,然后将该描述符传递到 read()。您使用描述符来引用数据以管理流;可能只是一个索引,如果读取字符,该索引会增加数字。 seek() 实现可以直接设置相同的索引。

一旦您实现了这些函数,更高级别的 stdio 函数甚至 C++ iostream 将正常工作于您在低级别实现中支持的设备或文件系统。

关于c - 是否可以在 C 中伪造文件流,例如 stdin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28770964/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com