gpt4 book ai didi

c - 从管道读取

转载 作者:太空宇宙 更新时间:2023-11-04 00:54:43 25 4
gpt4 key购买 nike

我需要从 C PIPE 读取总结果。我可以创建一个巨大的缓冲区并慢慢填充它,但这似乎效率低下并且非常占用内存,所以我想知道是否有人知道如何做。

这是我的代码:

FILE* pipe = popen(command, "r");
if (!pipe)
{
strcpy("FAIL", output);
return -1;
}

char buffer[128];

while (!feof(pipe))
{
if (fgets(buffer, 128, pipe) != NULL)
{
// should add buffer to main one here
}
}

如有任何帮助,我们将不胜感激。

在 C++ 中,我可以将它添加到一个字符串中,但我不确定在 C 中该怎么做。

编辑:我不知道最终缓冲区的大小。

最佳答案

I could just create a massive buffer and slowly fill it, but that seems inefficient and very memory hungry

如果您需要将所有内容都保存在内存中 - 这是唯一的方法。如果将所有数据收集在一起需要很长时间,您可以将临时结果缓存在一个临时文件中,但最终您将不得不以某种方式填充那个巨大的内存缓冲区。临时缓存可以在发送方或接收方,由您决定。

我不确定我能理解你的困境...

编辑

经过一番澄清后,问题似乎是无法提前知道所需的内存量。

为此realloc确实是处理方法之一,使用文件作为临时缓存方法也可以解决这个问题,而不会影响额外的内存性能 realloc原因(但由于磁盘 I/O 慢得多,您反而会受到时间性能的影响)。

关于c - 从管道读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541064/

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