freopen是被包含于C标准库头文件<stdio.h>中的一个函数,用于重定向输入输出流。该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。
函数名:freopen
函数,以指定模式重新指定到另一个文件。胶从星担画围极模式用于指定新文件的访问方式。
头文件:std或明效影查危升单强io.h
C8许素云配9函数声明:
C99函数声明:
来自 形参说明:
filename:需要重定向到的文件名或文件路径。
mode:代表文件访问权限的字符串。例如,"r"表示"只读访问"、"w"表示"只写访问"、"a"表示"追加写入"。
stream:需要被重定向的文件流。
返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL。
举例1
举例2
如果上面的例子您没看懂这个函数的用法的话,请看这个例子。这个例子实现了从stdout到一个文本文件的重定向。即,把输续审丝单使菜海长妈面项出到屏幕的文本输出到一个文本文直仅色件中。
编译运行一下,你会发现,十个数输出到了D盘根目录下文本文件output.txt中。
举例3
从文件in.txt中读入数据,计算加和输出到out.txt中
当标准输出stdout被重定向到指定文件后,如何把它重定向回原来"默认"的输出设备(即显示器)呢?
C标准库的回复是:不支持。没有任何方法可以恢复原来的输出流。
那是否动找独存在依赖具体平台的实现呢?存在。
在操作系统中,命令行控制台(即键盘或者显示器)被视为一个文件,既然是文件,那么就有"文件名"。由于历史原因,命令行控制台文来自件在DOS操作系统和Windows操作系统360百科中的文件名为"CON",在其它的操作系统(例如Unix、Linux、Mac OS X、Android等等)中的文件名为"/dev/tty"。
因此,在Windows中可以使用
其它操作系统中使用:
Windows代码举例
Linux代码举例
警告:在使用上述方法在输入输出流间进行反复的重定向时,极有可能导致流指针践压放生得到不被期待的结果,使输入输出发生异常,所以如果需要在文件的输入输出和标准输入输出流之间进行切换,建议使用fopen或者是C++标准则的ifstream及ofstream。