質問: ### 前提・実現したいこと C++で別のプログラムを実行し、標準入出力が処理できるという_popen関数があるときき、それを用いようとしているのですが、_popen関数を用いた標準入力のやり方がわからず困っています。 ### 発生している問題 "test.exe"を起動し、そこに64という値を標準入力で与えたいのですが、上手くいきません。 ### 該当のソースコード use.cpp (実際に起動するプログラムです。) ``` #include #include using namespace std; int main(void){ FILE *fpin,*fpout; char buff[256]; fpin=_popen("test.exe","r"); fpout=_popen("64","w"); while (fgets(buff,sizeof(buff),fpin)!=NULL) { fputs("64",fpout); } while (fgets(buff,sizeof(buff),fpin)!=NULL) { printf("%s",buff); } _pclose(fpin); _pclose(fpout); return 0; } ``` test.cpp (use.cppによって起動されるプログラムです。) ``` #include #include using namespace std; int main(void){ int i; cin>>i; cout<<"Value : "<
回答: `_popen`では、標準入力と標準出力のどちらか一方しか使えません。 `_popen("test.exe","r")`だと、プログラムの標準出力を読み込むようにオープンします。 `_popen("test.exe","w")`だと、プログラムの標準入力に書き込むようにオープンします。 (両方書くと、`test.exe`が2つ別々に起動しますよ) 1つのプログラムとの間で、標準入力と標準出力の両方を使うためには、少なくともCだと、pipeを作って、fork&exec して、ということになります。