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

Continuously write to subprocess using popen in C++

本文关键字:连续 子进程 popen c++      更新时间:2023-10-16

我需要使用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);
}

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

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

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

这个适合我:

#include <stdio.h>
#include <unistd.h>
#include <iostream>
int main(int argc, char ** argv) {
   FILE *in;
   char buff[1024];
   if(!(in = popen("./2.sh", "w"))){
       return 1;
   }
   while(1) {
      char buffer[] = "xxn";
      fwrite(buffer, sizeof(char), sizeof(buffer), in);
      fflush(in);
      std::cout << "Wrote!" << std::endl;
      usleep(1000000);
   }
}
#!/bin/sh
read INP
echo 'read: ' $INP

所以我真的怀疑问题是缺少n