用freopen把输入输出定向到文件后,怎么重新用屏幕进行输入输出?
用freopen把输入输出定向到文件后,怎么重新用屏幕进行输入输出?
谢谢了
[解决办法]
再定向到标准输出啊
标准输出是 stdout
[解决办法]
freopen之后如何恢复标准句柄
通常可以使用freopen将输入/输出重定向到文件中。例如
PLAIN TEXT
C++:
freopen( "in.txt ", "r ", stdin);
freopen( "out.txt ", "w ", stdin);
但并不存在一个完全兼容的解决方案能够在以后将标准句柄恢复。在C标准库里面是没有办法的。
很容易想到的方式是重新打开标准控制台设备文件,但遗憾的是,这个设备文件的名字是操作系统相关的。
在DOS/Win中,这个名字是CON,因此可以使用 :
freopen( "CON ", "r ", stdin)
在linux中,控制台设备是 /dev/console.
C++ :
freopen( "/dev/console ", "r ", stdin)
另外,在类unix系统中,可以使用dup系统调用来预先复制一份原始的stdin句柄。
使用C++的流库,可以有另外一种方式达到freopen的效果,而且很容易恢复。就是使用流的rdbuf。例如:
C++:
ofstream outf( "out.txt ");
streambuf *strm_buf = cout.rdbuf();
cout.rdbuf(outf.rdbuf());
cout < < "write something to file ";
cout.rdbuf(strm_buf); //recover
cout < < "display something on screen ";
[解决办法]
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
FILE *fp;
char buf[1024];
char tty[32];
fp = freopen( "./ReadMe.txt ", "r ", stdin);
fgets(buf, sizeof(buf), stdin);
printf( "%s ", buf);
fp = freopen(tty, "r ", stdin);
fgets(buf, sizeof(buf), stdin);
printf( "%s ", buf);
return 0;
}
[解决办法]
freopen( "CON ", "r ", stdin);
freopen( "CON ", "r ", stdout); //CON 是控制台的另外一个设备文件名
[解决办法]
在DOS/Win中,这个名字是CON,因此可以使用 :
freopen( "CON ", "r ", stdin)
在linux中,控制台设备是 /dev/console.
C++ :
freopen( "/dev/console ", "r ", stdin)
另外,在类unix系统中,可以使用dup系统调用来预先复制一份原始的stdin句柄。
======================================
Fine ...