代码之家  ›  专栏  ›  技术社区  ›  YuKangGan

如何丢弃子进程的stdout,但将stdout保留在父进程中?

  •  2
  • YuKangGan  · 技术社区  · 9 年前

    我正在用Linux编写一个C程序,并使用 fork 以创建子进程。当我使用 ./test 1 > out.txt 父进程和子进程都将信息发送到 stdout .

    我想要这个文件 out.txt 仅包含父进程的输出,并丢弃子进程的所有输出。

    我该怎么做?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Adam D. Ruppe    9 年前

    我会将父级的stdout重定向到该文件,然后当您分叉时,重新打开子级的stdouthandle以转到其他位置(如/dev/null,如果您只是想放弃它,或者您可以再次打开终端,如果您希望它返回stdout)。

    这个 dup2 系统调用可以做到这一点。 open 一个新的, close 那就换旧的吧 重复2 将新文件描述符设置为旧编号(stdout为1)。

    这是shell本身用来重定向到文件的过程。