c语言重定向stdout 到 /dev/null 及恢复

------------------------------------------------------------
author: hjjdebug
date:   2023年 07月 27日 星期四 17:49:49 CST
descriptor: c语言重定向stdout 到 /dev/null 及恢复
------------------------------------------------------------
#include
#include

#pragma GCC diagnostic ignored "-Wunused-variable"

int main()
{
    printf("hello\n");
    int save = dup( 1 ); //保存stdout 的fd, 返回的newfd 是3
    FILE *fp=freopen("/dev/null","w",stdout); // 重定向stdout 到 /dev/null, 则以后打印将不可见
    printf("world\n"); //文本将不会打印
    fflush(fp); // 清空fp 内容,否则恢复时"world"会打印到屏幕上
    // 如何恢复stdout ?
//    fclose(stdout); //freopen已经关闭过了,不能再关,否则出现段错误
//    stdout = fdopen(1, "w"); //reopen: 1 is file descriptor of std output
//    stdout = fdopen(STDOUT_FILENO, "w"); //STDOUT_FILENO = 1, 虽可打开, 但不能恢复打印
    int ret=dup2(save, 1 );//把保存的fd 恢复到1上, 恢复标准输出文件描述符, 返回值的newfd 是1
    printf("hello world\n"); //文本将会打印到屏幕上
    return 0;
}

你可能感兴趣的:(linux,c,stdout)