我正在尝试将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开发它的价值,
提前感谢您的帮助。
答案 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.