gpt4 book ai didi

c++:子进程输出到stdin

转载 作者:可可西里 更新时间:2023-11-01 15:55:52 26 4
gpt4 key购买 nike

假设我想从我的程序中调用一个子进程,并且我想将该子进程的输出读取到我的程序中。

这是一个简单的方法:

//somefile.cpp
system("sub_process arg1 arg2 -o file.out");
//call the subprocess and have it write to file
FILE *f = std::fopen("file.out", "r");
//.... and so on

我们都知道 I/O 操作的计算速度很慢。为了加快速度,我想跳过写入文件然后从文件读取的步骤,而是将此子进程的输出直接重定向到stdin(或其他流)

我该怎么做?如何跳过 I/O 操作?

注意:许多程序在运行时将一些诊断信息吐出到标准输出中,并将输出的干净版本写入标准输出(例如:标准输出:“step1...done,step2...done,step3..done "-o file-out: "The magic number is: 47.28"), 所以忽略 "-o "参数并相信输出将自动重定向到 stdout 不一定有帮助...

提前感谢大家。

最佳答案

使用 popen 跳过文件,并通过内存缓冲区获取命令的输出。

#include <iomanip>
#include <iostream>
using namespace std;
const int MAX_BUFFER = 255;
int main() {
string stdout;
char buffer[MAX_BUFFER];
FILE *stream = popen("command", "r");
while ( fgets(buffer, MAX_BUFFER, stream) != NULL )
stdout.append(buffer);
pclose(stream);
cout << endl << "output: " << endl << stdout << endl;
}

关于c++:子进程输出到stdin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8438277/

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