2011-04-25 46 views
1

我确实有一个在HPUX和Linux上运行的C++程序。我的程序创建2个子进程,父进程等子进程完成。当我执行我的程序窗体运行目录时,如下所示, run> myProgram在父级以编程方式从子进程捕获打印,以便它们不会转到标准输出

我从显示的子进程+父进程中获取打印。所以我需要阻止我的子进程打印到命令提示符窗口。子进程完成后,我想打开打印,以便父级可以显示结果。

有谁知道如何打开和关闭打印?

+1

如何你的孩子进程创建的?他们是来自你父母的分叉,还是他们是从系统命令产生的? – Dan 2011-04-25 20:56:06

+1

你真的想打开和关闭stdout吗?你能不能简单地将它们重定向到类似文件的东西,然后在完成后读取它?或者那不是你想要的? – Bart 2011-04-25 21:03:12

回答

1

this answer获得灵感:

#include <stdio.h> 

main() 
{ 
    int fd; 
    fpos_t pos; 

    printf("printing to stdout enabled\n"); 

    fflush(stdout); 
    fgetpos(stdout, &pos); 
    fd = dup(fileno(stdout)); 

    // Standard output redirected to the null device 
    freopen("/dev/null", "w", stdout); 

    f(); 

    // Standard output restored to its previous fd (the screen) 
    fflush(stdout); 
    dup2(fd, fileno(stdout)); 
    close(fd); 
    clearerr(stdout); 
    fsetpos(stdout, &pos);  /* for C9X */ 

    printf("printing to stdout enabled again\n"); 
} 

f() 
{ 
    printf("message sucked away by /dev/null"); 
} 
+0

非常感谢你 – usustarr 2011-04-25 23:30:42

+0

不客气,记住也可以upvote接受/有用的答案! :) – 2011-04-25 23:31:56

+0

可悲的是我没有足够的投票来upvote u,对不起。你碰巧知道如何关闭打印到日志文件,然后再打开它? – usustarr 2011-05-04 21:56:44

相关问题