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