本进程stdout重定向到管道 以及恢复

目标

接管stdout输出,重定向到指定管道,不需要的时候则恢复。

原理

创建管道,通过微软的dup保存默认stdout,_dup2接口重定向,再通过_dup2恢复回来。

代码

参考以下代码。

        int hStdOut;
	int hStdOutPipe[2];

	if (_pipe(hStdOutPipe, OUT_BUFF_SIZE, O_BINARY | O_NOINHERIT) == -1)
		return   -1;
	hStdOut = _dup(_fileno(stdout)); // 备份默认stdout
	if (_dup2(hStdOutPipe[WRITE_HANDLE], _fileno(stdout)) != 0)
		return   -2;
	_close(hStdOutPipe[WRITE_HANDLE]);

	printf("test");	// 重定向后,测试一下输出
	fflush(stdout);

	// 恢复默认stdout:
	if (_dup2(hStdOut, _fileno(stdout)) != 0)
		return   3;
	_close(hStdOut);
	printf("123");	// 恢复后,再测试
	fflush(stdout);

        // 测试一下接管期间管道拿到的stdout的数据
	char szBuffer[OUT_BUFF_SIZE];
	for (;;) {
		int nOutRead = _read(hStdOutPipe[READ_HANDLE], szBuffer, OUT_BUFF_SIZE);
		if (nOutRead) {
			....
		} else
			break;
	}
	_close(hStdOutPipe[READ_HANDLE]);

结束。

有任何问题请加入qq群:222670733

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值