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);
       }
   }(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
