【问题标题】:Obtaining a FILE * handle without actually creating a file on disk获取 FILE * 句柄而不实际在磁盘上创建文件
【发布时间】:2012-12-24 17:04:27
【问题描述】:

我需要使用无法修改的旧库处理一些数据。我的问题是它需要一个普通的旧 FILE 句柄才能保存其结果,而且我根本不需要在磁盘上写任何东西。

我知道没有标准的方法可以做到这一点,但是否有可能使用 windows API、boost 或其他任何东西来获取指向内存的文件句柄?

我没有找到明确保证不会(系统地)执行磁盘访问的解决方案。

【问题讨论】:

标签: c++ windows file winapi


【解决方案1】:

试试

fmemopen

来自How to write to a memory buffer with a FILE*?

tbert 的回答:

对于偶然发现此线程并寻找正确答案的其他人 回答:是的,有一种符合标准的方式来使用内存作为 文件描述符:fmemopen 或 open_memstream,取决于 你想要的语义。

http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html

http://pubs.opengroup.org/onlinepubs/9699919799/functions/open_memstream.html

【讨论】:

  • 谢谢。这些功能在 Windows 上不可用,但对于任何使用 Linux 的人来说仍然是一个有效的答案。
【解决方案2】:

我相信你可以fopen一个管道,使用管道语法:

fopen("\\\\.\\pipe\\WritePipe", "w+");

您需要事先使用CreateNamedPipe 创建管道,但一旦完成,您应该能够使用管道来处理数据。

您可能必须创建一个线程来从管道中读取数据,以确保您的应用不会挂起,但它应该可以满足您的需要(无法访问文件系统)

【讨论】:

  • 非常感谢。我希望有一个更简单的解决方案,但我会探索这种可能性。
猜你喜欢
  • 2011-05-15
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2015-11-06
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多