Сброс STDOUT и STDERR с помощью / dev / tty - PullRequest
0 голосов
/ 25 октября 2011

Я пытаюсь перенаправить 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 rootколесо 2, 0 октября 21 10:46 / dev / tty

Я разрабатываю на Snow Leopard то, что стоит,

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 25 октября 2011

Я бы просто сохранил предыдущие настройки с помощью вызова dup, а затем использовал dup2, когда вы хотите восстановить их.Это особенно верно, поскольку «исходные настройки», на которые вы хотите установить их обратно, могут вообще не быть терминальным устройством (это неразумное предположение с вашей стороны) - пользователь, возможно, уже использовал перенаправление вневаша сфера влияния.

Таким образом, вам вообще не нужно беспокоиться об их повторном открытии, включая возможность того, что вы можете получить неверные аргументы или выполнить какую-либо специальную настройку (например, с помощью *).1007 *).

Что-то вроде:

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.
...