首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中可以伪造文件流(如stdin )吗?

在C中可以伪造文件流(如stdin )吗?
EN

Stack Overflow用户
提问于 2015-02-27 17:32:47
回答 2查看 1.5K关注 0票数 4

我正在开发一个没有文件系统的嵌入式系统,我需要执行一些程序,这些程序可以通过命令(比如参数)或直接从stdin获取指定文件中的输入数据。

我知道可以使用这个答案中的方法在文件中使用二进制文件数据:C/C++与GCC:静态地向可执行文件/库添加资源文件,但是目前我需要重写所有的程序来以一种新的方式访问数据。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-27 17:49:36

如注释所示,您可以使用POSIX fmemopen函数。您将需要一个libc提供它,例如musl-libc或可能的滑翔。顺便说一句,出于基准测试的目的,您可以在硬件上安装一些类似Linux的小型操作系统,例如uclinux

票数 2
EN

Stack Overflow用户

发布于 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将正常工作于您在低级别实现中支持的设备或文件系统。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28770964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档