------------------------------------------------------------
author: hjjdebug
date: 2023年 07月 27日 星期四 17:49:49 CST
descriptor: c语言重定向stdout 到 /dev/null 及恢复
------------------------------------------------------------
#include <stdio.h>
#include <unistd.h>
#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;
}