Я пишу функцию, которая при заданном аргументе либо перенаправит стандартный вывод в файл, либо прочитает стандартный вывод из файла. Для этого я закрываю файловый дескриптор, связанный с stdout или stdin, чтобы при открытии файла он открывался под дескриптором, который я только что закрыл. Это работает, но проблема в том, что, как только это будет сделано, мне нужно восстановить stdout и stdin до того, что они должны быть на самом деле.
То, что я могу сделать для stdout, открыто ("/ dev / tty", O_WRONLY); Но я не уверен, почему это работает, и что более важно, я не знаю эквивалентного утверждения для stdin.
Итак, у меня есть, для стандартного вывода
close(1);
if (creat(filePath, O_RDWR) == -1)
{
exit(1);
}
и для стандартного ввода
close(0);
if (open(filePath, O_RDONLY) == -1)
{
exit(1);
}