gpt4 book ai didi

c++ - 从字符串创建 FILE*

转载 作者:行者123 更新时间:2023-11-28 01:04:41 25 4
gpt4 key购买 nike

我正在使用一个库,他们在其中使用路径来定义从中读取/写入数据的输入和输出文件。

App1 写入输入文件,App2 读取该输入文件并创建输出文件。然后,App1 读取输出,大家都很高兴。

现在,我们得到了App1App2之间的通信需求,不再创建文件。因此,App1 应将一个缓冲区传递给 App2(一个简单的 char*)以及一个预分配的输出缓冲区,其中 App2 将结果写入.

不幸的是,在 App2 中使用的整个库中,FILE* 用于读取/写入。

那么,问题来了:我能否在不重写 App2 使用的库的情况下(或稍作改动)使用从 App1 传递的缓冲区> 到 App2 进行信息交换?恕我直言,这需要我可以从缓冲区创建一个 FILE*,而磁盘上没有该 FILE*

我读到对于 .NET 我可以使用 System.IO.StringReader 类,但是由于我使用的是纯 C++ 而没有 .NET,所以我不能使用那些东西。


额外奖励:
调用者(即 App1)是托管代码(C# 应用程序),被调用者(即 App2)是普通的 C++ DLL(即 App1 调用该 DLL 中的一个函数)。


编辑:
我喜欢这样的答案,即数据交换可以同步发生,调用者将缓冲区传递给被调用者,被调用者从输入缓冲区读取并写入输出缓冲区,然后被调用者终止并且调用者可以读取内容缓冲区。

最佳答案

对于 IPC,您可以使用管道,很容易从为管道创建的 winapi HANDLE 生成 FILE*

此代码将展示如何:

HANDLE read_hnd;
HANDLE write_hnd;
//make sa (SECURITY_ATTRIBUTES)
if(!CreatePipe(&read_hnd, &write_hnd, &sa, NULL))
{
//error
}
int fd = _open_osfhandle((intptr_t)read_hnd, _O_RDONLY|_O_TEXT);
FILE *pipe_read_file = _fdopen(fd, "rt");

对于 IPC,您应该使用命名管道,但想法相同。

关于c++ - 从字符串创建 FILE*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898759/

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