#stdout #stderr #tty
#стандартный вывод #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);
}
вызов open на tty всегда завершается с ошибкой. (возвращает -1). Есть ли что-то фундаментально неправильное, что я пытаюсь сделать?
Я также подумал, что, возможно, это может быть проблема с разрешениями, поэтому я проверил их:
crw-rw-rw- 1 корневое колесо 2, 0 21 октября 10:46 / dev/tty
Я разрабатываю Snow Leopard, чего бы это ни стоило,
Заранее спасибо за любую помощь.
Комментарии:
1. Просто дополнительное примечание: я распечатал ошибку с помощью perror . Он говорит, что «Устройство не настроено».
Ответ №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.