C语言重定向输入输出的方法

来源:互联网 发布:林琴南 知乎 编辑:程序博客网 时间:2024/06/08 14:01

       C标准库头文件<stdio.h>中有一个freopen的函数,用于重定向输入输出流。该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。函数原型是

  FILE *freopen(const char *filename,const char*mode,FILE *stream);

  参数说明:

  filename 需要重定向到的文件名或文件路径。

  mode   代表文件访问权限的字符串,"r"表示只读,"w"表示只写,"a"表示追加写入。

  stream 需要被重定向的文件流。

返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL。

当标准输出stdout被重定向到指定文件后,如何把它重定向回原来“默认”的输出设备(即显示器)呢?
C标准库是不支持的。没有任何方法可以恢复原来的输出流。但是,存在依赖具体平台的实现。
在操作系统中,命令行控制台(即键盘或者显示器)被视为一个文件,既然是文件,那么就有“文件名”。命令行控制台文件在DOS操作系统和Windows操作系统中的文件名为"CON",在其它的操作系统(例如Unix、Linux、Mac OS X、Android等等)中的文件名为"/dev/tty"。
所以,在Windows中可以使用
freopen( "CON", "w", stdout );
其它操作系统中使用:
freopen( "/dev/tty", "w", stdout );
这样就可以恢复原来输出设备的使用。


1 0