c - 从管道读取

标签 c pipe

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

相关文章:

c - C POSIX进程管道/套接字通信练习第二个进程被卡住

c - 使用管道复制字符串

c - 如何用gdb调试成C程序对应的反汇编?

c - 如何将 unsigned char* 转换为 char*

c - C 语言中克罗内克积的高效计算

将 char 数组转换为 char 常量 (c)

linux - 管道如何工作?

awk - 是否有可以处理 s 表达式流的类似 Awk 或 Lisp 的编程语言?

从管道读取的子进程失败并且似乎出现故障

c - For 循环对数字之间进行计数