1.利用控制台命令(以windows为例)
代码:
#include
int main()
{
char c;
while((c = getchar())!=EOF && c!='\n')
{
putchar(c);
}
return 0;
}
那么如何利用控制台重定向呢?请看控制台运行截图:
在程序后加>输出流名称,即为重定向标准输出流到输出流名称这个流,加<输入流名称,即可重定向标准输入流到输入流名称这个流
运行结果截图
限制:只能重定向标准输入输出流,且分别只能打开一个文件流。
2.利用freopen重定向打开库函数
代码:
#include
int main(void)
{
char c;
if(freopen("stdin.txt","r",stdin) == NULL) //将标准输入流重定向至stdin.txt流
{
fprintf(stderr,"打开文件失败!");
exit(-1);
}
if(freopen("stdout.txt","w",stdout) == NULL)//标准输出流重定向至stdout.txt流
{
fprintf(stderr,"打开文件失败!");
exit(-1);
}
while((c = getchar())!=EOF && c!='\n')
{
putchar(c);
}
return 0;
}
运行结果截图
freopen用于重定向输入输出流。该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。相对于控制台命令具有更好的灵活性,且可指定打开流的模式(如“r”只读模式);
C89函数声明:FILE *freopen( const char *filename, const char *mode, FILE *stream );
C99函数声明:FILE *freopen(const char * restrict filename, const char * restrict mode, FILE * restrict stream);
形参说明:
filename:需要重定向到的文件名或文件路径。返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL。
当标准输出stdout被重定向到指定文件后,如何把它重定向回原来“默认”的输出设备(即显示器)呢?
C标准库的回复是:不支持。没有任何方法可以恢复原来的输出流。
那是否存在依赖具体平台的实现呢?存在。
在操作系统中,命令行控制台(即键盘或者显示器)被视为一个文件,既然是文件,那么就有“文件名”。由于历史原因,命令行控制台文件在DOS操作系统和Windows操作系统中的文件名为"CON",在其它的操作系统(例如Unix、Linux、Mac OS X、Android等等)中的文件名为"/dev/tty"。