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

------------------------------------------------------------
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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值