Как восстановить дескриптор файла стандартного вывода? - PullRequest
0 голосов
/ 09 февраля 2012

Мне нужна помощь, чтобы понять дескрипторы файлов

Так вот мой код:

int main()
{
    char ch;
    close(1);
    //now opening a file so that it gets the lowest possible fd i.e. 1
    int fd=open("txt",O_RDWR);
    //check..
    printf("first printtf is executed\n");
    scanf("%c",&ch);
    printf("ur value is %c\n",ch);

    printf("second printf is executed\n");
    return 0;
}

в вышеупомянутой программе я попытался перенаправить вывод printf в файл txt, а не на стандартный вывод, то есть на терминал. Но как восстановить стандартный дескриптор выходного файла, чтобы printf снова работал как обычно для второго случая, то есть второй printtf должен выдавать вывод только на терминал ...

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012

Самый простой способ сделать это - продублировать выходной дескриптор перед его закрытием.Вы должны посмотреть на dup .

0 голосов
/ 09 февраля 2012

Прежде чем закрыть его, я думаю, что вы хотите дублировать () его.Когда вам это понадобится, вы можете dup () dup.

dup всегда будет использовать самый низкий дескриптор

int out = dup(1);
close(1);
int fd = open();
...
close(fd);
dup(out);
close(out);

Предупреждение: это из памяти и не проверено;

...