【问题标题】:Resetting STDOUT and STDERR with /dev/tty使用 /dev/tty 重置 STDOUT 和 STDERR
【发布时间】:2011-10-25 01:06:18
【问题描述】:

我正在尝试将 stdout 和 stderr 重定向到一个文件,然后将它们恢复为原始设置。我已经成功地将输出重定向到一个文件,但我似乎无法从 tty 恢复它们。这是我的代码:

            fid = open("/dev/tty", O_WRONLY);
            if (fid < 0) {
                fprintf(stderr, "Opening TTY failed.");
                exit(1);
            } else {
                close(1);
                dup(fid);

                close(fid);
            }

在 tty 上的 open 调用总是失败。 (返回 -1)。我正在尝试做一些根本错误的事情吗?

我也认为这可能是权限问题,所以我检查了它们:

crw-rw-rw- 1 根轮 2, 0 Oct 21 10:46 /dev/tty

我正在 Snow Leopard 上开发它的价值,

提前感谢您的帮助。

【问题讨论】:

  • 补充一点:我使用 perror 打印出了错误。它说“设备未配置”。

标签: stdout stderr tty


【解决方案1】:

我会通过dup 调用保存以前的设置,然后在您想要恢复它们时使用dup2尤其是如此,因为您希望将它们设置回的“原始设置”可能根本不是终端设备(这是您的一个不明智的假设) - 用户可能已经在外部使用了重定向你的影响范围。

这样您就不必担心重新打开它们,包括您可能会弄错参数或必须进行任何特殊设置(例如使用ioctl)。

类似的东西:

int saveFd = dup (1);        // check for errors.

blahBlahBlah();              // close file desc 1, reopen,
                             //   and weave your magic.

int rc = dup2 (1, saveFd);   // check for errors.

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 2014-03-06
    • 2017-11-30
    • 1970-01-01
    • 2018-02-25
    • 2012-01-23
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多