Перенаправление стандартного ввода-вывода: freopen + stdin / stdout против open + dup2

Я хочу перенаправить stdin / stdout в какой-нибудь файл. Программа написана для ОС Unix, но я думаю, что использование стандартной библиотеки C / C ++ вместо функций ОС — это хорошо. Я знаю, как я могу сделать это, используя функции ОС dup2() а также open() но я прочитал несколько способов сделать это с помощью reopen() на stdin или же stdout, Будет ли повторное открытие стандартных переменных делать то, что я хочу? Заменит ли он файлы, открытые в 0 и 1 файловых дескрипторах? Какой способ лучше?

1

Решение

Поскольку вы пишете свою собственную оболочку, я бы использовал функции более низкого уровня dup2 () и open ().

freopen () на stdin закроет исходный stdin и откроет файл, который вы запрашивали, в позиции stdin — так что теперь вы потеряли stdin. Не то чтобы это имело большое значение, если вы используете open () и dup2 () для замены дескриптора файла 0 или 1, конечно — вы все равно потеряете оригинальный stdin, так что делайте это только после того, как вы разветвились.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]