0

我正在尝试将 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, 0 Oct 21 10:46 /dev/tty

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

提前感谢您的帮助。

4

1 回答 1

0

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

这样,您根本不必担心重新打开它们,包括您可能会弄错参数或必须进行任何特殊设置(例如 with 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.
于 2011-10-25T01:24:59.590 回答