在C++中使用popen连续写入子进程

Lui*_*ruz 5 c++ ipc popen

我需要使用popen打开一个子进程,该进程将不断询问用户输入...主进程需要通过管道发送该数据.

这是我的第一次尝试:

FILE *in;
char buff[1024];

if(!(in = popen("cd FIX/fix2/src; java -cp .:./* com.fix.bot", "w"))){
    return 1;
}

while(1){
    char buffer[] = { 'x' };
    fwrite(buffer, sizeof(char), sizeof(buffer), in);

    cout << "Wrote!" << endl;
    usleep(1000000);
}
Run Code Online (Sandbox Code Playgroud)

但是数据没有发送!我需要用pclose()关闭管道,以便将数据写入进程.如何在不必每次都关闭管道的情况下确保写入数据?

小智 2

您需要调用fflush(in)以确保缓冲的数据实际上已写入流中。

另请检查java -cp .:./*命令中是否未扩展为无效的类路径。我认为,如果当前目录中有多个文件,而不是实际的类路径条目,那么最终会扩展到多个参数。