使用C++如何使用stdin stdout和stderr启动exe /进程?我知道如何在.NET中执行此操作并且我记得在过去使用popen但是popen似乎允许stdin或stdout不是两者而不是全部3.
我需要这个用于Windows,但欢迎使用linux解决方案,因为我将来需要它用于同一个项目.
当我在Windows中调用CreateProcess时,新进程似乎不会继承调用进程的控制台.我制作了一个运行"ruby xtest"的测试程序,xtest是一个将"hello"写入标准输出的脚本.我从Emacs运行了这个测试程序,没有输出.我还尝试了以下代码调用GetStdHandle,但同样没有输出.然后我尝试将dwCreationFlags中的CREATE_NEW_CONSOLE传递给CreateProcess,后者用Ruby输出创建了一个全新的窗口.最后,我做了一个简单的fork/exec测试程序,并使用Cygwin的GCC编译它.这个程序工作:Ruby输出出现在Emacs中如预期的那样.我试图在http://cygwin.com/cgi-bin/cvsweb.cgi/src/winsup/cygwin/spawn.cc?rev=1.268&content-type=text/x-cvsweb-markup&中破译Cygwin源代码.但失败了.那么,如何使新进程继承父进程的控制台,以便子进程的输出按预期显示?
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
memset(&pi, 0, sizeof(pi));
si.dwFlags |= STARTF_USESTDHANDLES;
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
if(!CreateProcess(0, "ruby xtest", 0, 0, 1, 0, 0, 0, &si, &pi)) die("CreateProcess");
Run Code Online (Sandbox Code Playgroud)