我需要从 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/