freopen重定向stdin与stdout后如何恢复正常

本文详细介绍了在Windows和Linux环境下,使用C++通过`freopen`函数更改标准输出设备的实现方式及遇到的问题,特别关注了在Linux下使用`/dev/tty`与`/dev/console`的区别,以及设置`set-user-id`后的输出行为。
摘要由CSDN通过智能技术生成
函数定义如下:
FILE * freopen ( const char * filename, const char * mode, FILE * stream );


在windows下控制台的标准输出设备是 CON ,在linux下面则用 /dev/tty 来显示当前终端,标准的应该是 /dev/console ,但个人试验只有tty的情况下

才能成功。设置了set-user-id并将user 改成root后依然无法使用console完成输出,具体原因有待考证。

在windows环境下:

#include <stdio.h>  
#include <stdlib.h>  
  
int main(int argc, char *agrv[])  
{  
    freopen("ExampleIn","r",stdint);   
    freopen("ExampleOut","w",stdout);  
    /*       program        */  
    freopen("CON","r",stdint);  
    freopen("CON","w",stdout);  
    printf("succeed!/n");  
    return 0;  
}  

在linux环境下:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *agrv[])
{
	freopen("ExampleIn","r",stdint); 
	freopen("ExampleOut","w",stdout);
	/*             program              */
	freopen("/dev/tty","r",stdint);
	freopen("/dev/tty","w",stdout);
	printf("succeed!/n");
	return 0;
}

转自:http://blog.csdn.net/lstjsuperman/article/details/6407409

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值