【问题标题】:how to reopen the stdout file after closing all the descriptors?关闭所有描述符后如何重新打开标准输出文件?
【发布时间】:2016-01-18 11:16:00
【问题描述】:

我在守护程序中遇到问题。问题是在关闭所有打开的描述符后,我需要重新打开 stdout 文件来打印消息。

我有一种方法。但这行不通。

方法是使用 dup 复制标准输出描述符并重新打开它。但是调用 deamonize 函数会关闭所有文件描述符。所以,那个重复的文件描述符也被关闭了。

谁能帮我做这件事。

【问题讨论】:

  • 为什么要在守护进程中打印到标准输出?
  • 我想检查程序是否只运行一次(单实例守护进程)。因此,如果它已经执行,我需要在终端中打印错误消息。
  • 这个问题可能与this other question有关
  • @msc,不是那个问题。我的要求是关闭所有文件描述符后,我需要打开标准输出文件。
  • 它不工作。它给出了错误“没有这样的设备或地址”。

标签: c


【解决方案1】:

如果你使用daemon()进行守护,你可以指定noclose来防止这些文件描述符被关闭:

daemon(0, 1);

但是你应该在手动检查后关闭这些,否则你的终端可能会搞砸。

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多