Linux C ++运行并与新进程通信

我需要做一个程序运行一个进程(我的另一个程序),并可以与这个进程进行通信(发送标准input和接收标准输出)。 我已经阅读了像popen()CreateProcess()这样的函数,但是我不太了解如何使用它们。

如果你给我看一些示例代码(如何启动进程,发送stdin,接收stdout),那就太好了。 C ++函数将是首选(如果有的话)。

谢谢你的build议。

POSIX接口仅用于C语言。 但是你可以在C ++中使用它们。

基本上:

 #include <unistd.h> // Include some other things I forgot. See manpages. int main() { // Open two pipes for communication // The descriptors will be available to both // parent and child. int in_fd[2]; int out_fd[2]; pipe(in_fd); // For child's stdin pipe(out_fd); // For child's stdout // Fork pid_t pid = fork(); if (pid == 0) { // We're in the child close(out_fd[0]); dup2(out_fd[1], STDOUT_FILENO); close(out_fd[1]); close(in_fd[1]); dup2(in_fd[0], STDIN_FILENO); close(in_fd[0]); // Now, launch your child whichever way you want // see eg. man 2 exec for this. _exit(0); // If you must exit manually, use _exit, not exit. // If you use exec, I think you don't have to. Check manpages. } else if (pid == -1) ; // Handle the error with fork else { // You're in the parent close(out_fd[1]); close(in_fd[0]); // Now you can read child's stdout with out_fd[0] // and write to its stdin with in_fd[1]. // See man 2 read and man 2 write. // ... // Wait for the child to terminate (or it becomes a zombie) int status waitpid(pid, &status, 0); // see man waitpid for what to do with status } } 

不要忘记检查错误代码(我没有),并参考手册页的细节。 但是你看到这样一个观点:当你打开文件描述符(例如,通过pipe )时,它们将可用于父母和孩子。 父母关闭一端,孩子关闭另一端(重定向第一端)。

聪明,不怕谷歌和手册页。