【问题标题】:Reopening stdin, stdout or stderr in c在 c 中重新打开标准输入、标准输出或标准错误
【发布时间】:2014-10-08 09:59:07
【问题描述】:

我看过这个Question

它说我们可以复制标准输入和标准输出的文件描述符,以便我们在程序的稍后阶段重新打开它们。

我的问题:

  • 我们能否以 O_WRONLY 模式打开文件“/dev/tty”以重新打开标准输出?
  • 这是正确的做法吗?
  • 有没有类似的方法可以重新打开stdin和stderr??

【问题讨论】:

  • 它说你应该。不是可以。他们提出的解决方案有什么问题?
  • 虽然重新打开/dev/tty 会起作用,但它无法处理std* 从来不是/dev/tty 的情况,而是通过调用shell 重定向到其他进程/文件。
  • 我见过使用“/dev/null”通过更改打开模式来重新打开标准输入、标准输出和标准错误。这是article。为什么使用 /dev/null??
  • @KarolyHorvath 解决方案没有问题。我自己直到现在都使用这种方法。但最后的声明很好奇,我想知道它是如何工作的。
  • 它打开 null 以获得有效的std* 描述符。与无效的文件描述符相反,读取/写入 null 不会失败(但当然不会失败)。

标签: c linux stdout stdin stderr


【解决方案1】:

不,您提出的方法不是正确的方法。 /dev/tty“设备”是您的终端设备,它不一定是您的标准输出所在。

例如,如果您将程序运行为:

yourprog >output.txt

然后打开/dev/tty不会为您提供起始标准输出(即output.txt 文件)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2013-05-11
    • 2014-07-22
    • 2011-11-30
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多