以编程方式捕获父级子进程的打印,这样它们就不会进入标准输出

发布于 2024-11-03 07:20:15 字数 203 浏览 1 评论 0原文

我有一个在 HPUX 和 Linux 上运行的 C++ 程序。我的程序创建了 2 个子进程,父进程等待两个子进程完成。当我从运行目录执行程序时,如下所示, 运行> myProgram

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

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

I do have a C++ program that runs on HPUX and Linux. My program creates 2 child process, parent waits for both child process to finish. When I execute my program form run directory as follows,
run> myProgram

I get prints from both child process + parent process displayed. So I need to way to stop my child process to print onto the command prompt window. After child process are completed, I would like to turn on printing, so that parent can display the results.

Does anyone know how to turn on and turn off prints?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

魂牵梦绕锁你心扉 2024-11-10 07:20:15

这个答案中汲取灵感:

#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");
}

Taking inspiration from 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");
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文