gpt4 book ai didi

c - 如何在 C 中关闭 stdout 和 stderr?

转载 作者:太空狗 更新时间:2023-10-29 16:42:01 25 4
gpt4 key购买 nike

我需要为我的一个 C 程序关闭 stdout 和 stderr。执行中的程序不退出怎么可能?

最佳答案

你可以:

fclose(stdout);
fclose(stderr);

对于想知道为什么要这样做的人来说,这是 Unix 上守护进程/服务进程的一项相当常见的任务。

但是您应该意识到关闭文件描述符可能会产生意想不到的后果:

  • 当您打开新文件时,将使用这些现在可用的描述符。因此,例如,如果您随后 fopen 该文件描述符(至少在 Linux 上)将替换 fd 1,即 stdout。随后使用此文件的任何代码都将写入此文件,这可能不是您想要的。
  • 请参阅 R.. 关于文件描述符与 C 库 FILE* 指针的评论。具体来说:
    • 如果你在 Linux 下写入一个关闭的 fd,你会得到一个错误,但是:
    • 如果您使用使用 stdoutstderr(它们是 FILE* 指针(参见 their definition)的 C 库函数,则编写这些在 FILE* 关闭时是未定义的行为。这可能会以意想不到的方式使您的程序崩溃,也不总是在错误点。参见 undefined behaviour
  • 您的代码并不是唯一受影响的部分。您使用的任何库以及您启动的任何继承这些文件描述符作为其标准描述符的进程也会受到影响。

快速的单线解决方案是 freopen()在 Linux/OSX 下说 /dev/null/dev/console 或在 Windows 上说 nul。或者,您可以使用特定于平台的实现来根据需要重新打开文件描述符/句柄。

关于c - 如何在 C 中关闭 stdout 和 stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4972994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com