C捕获分叉儿童cout
我有以下代码片段:
stringstream userOut; streambuf* old = cout.rdbuf(userOut.rdbuf()); pid_t pid; if (!(pid = fork())) { cout << "hello from child!" << endl; exit(0); } else { int status; // wait for child to finish wait(&status); // give cout old buffer back cout.rdbuf(old); // prints nothing! cout << "child content: " << userOut.str() << endl; } 我希望能够从子进程中捕获和重定向cout以在父进程中使用,但到目前为止,重定向的输出始终为空.可能导致这种情况的原因是什么? 解决方法
如评论中所述,分叉进程获取流的副本.所以它写入输出流的副本.
通常,您希望将管道用于此类问题.
#include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> int main(int argc,char *argv[]) { int pipefd[2]; pid_t cpid; char buf; if (argc != 2) { fprintf(stderr,"Usage: %s <string>n",argv[0]); exit(EXIT_FAILURE); } if (pipe(pipefd) == -1) { perror("pipe"); exit(EXIT_FAILURE); } cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Child reads from pipe */ close(pipefd[1]); /* Close unused write end */ while (read(pipefd[0],&buf,1) > 0) write(STDOUT_FILENO,1); write(STDOUT_FILENO,"n",1); close(pipefd[0]); _exit(EXIT_SUCCESS); } else { /* Parent writes argv[1] to pipe */ close(pipefd[0]); /* Close unused read end */ write(pipefd[1],argv[1],strlen(argv[1])); close(pipefd[1]); /* Reader will see EOF */ wait(NULL); /* Wait for child */ exit(EXIT_SUCCESS); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |