使用/ dev / tty重置STDOUT和STDERR

时间:2011-10-25 01:06:19

标签: stdout stderr tty

我正在尝试将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上的公开呼叫总是失败。 (返回-1)。我正在尝试做一些有趣的错误吗?

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

crw-rw-rw- 1根轮2,10月21日10:46 / dev / tty

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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

这样你根本不必担心重新打开它们,包括你可能会错误地引用参数或者必须进行任何特殊设置(例如使用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.