如何恢复标准输出的文件描述符?

时间:2012-02-09 10:46:44

标签: c linux printf system-calls file-descriptor

我需要帮助才能理解文件描述符

所以这是我的代码:

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 个答案:

答案 0 :(得分:4)

执行此操作的最简单方法是在关闭输出描述符之前复制它。您必须查看dup

答案 1 :(得分:0)

关闭它之前我想你想复制()它。 当你需要它时,你可以复制()复制。

dup将始终使用最低的描述符

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

警告:这是来自内存并未经测试; - )