freopen, freopen_s
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    | 在标头  <stdio.h>定义 | ||
| (1) | ||
| (C99 前) | ||
| (C99 起) | ||
| (2) | (C11 起) | |
1) 首先,试图关闭与 
stream 关联的文件,忽略任何错误。然后,若 filename 非空,则试图用 mode 打开 filename 所指定的文件,如同用 fopen ,然后将该文件与 stream 所指向的文件流关联。若 filename 为空指针,则函数试图重打开已与 stream 关联的文件(此情况下是否允许模式改变是实现定义的)。2) 同 (1) ,除了以 fopen_s 中的方式处理 
mode ,并将指向文件流的指针写入 newstreamptr ,还在运行时检测下列错误,并调用当前安装的约束处理函数:
-  newstreamptr是空指针
-  stream是空指针
-  mode是空指针
 
-  
- 同所有边界检查函数, freopen_s仅若实现定义了 __STDC_LIB_EXT1__ ,且用户在包含<stdio.h>前定义 __STDC_WANT_LIB_EXT1__ 为整数常量 1 才保证可用。
参数
| filename | - | 要关联到文件流的文件名 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| mode | - | 确定文件访问模式的空终止字符串 
 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| stream | - | 要修改的文件流 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| newstreamptr | - | 指向函数存储结果所用指针的指针(输出参数) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值
1) 成功时为 
stream 值的副本,失败时为空指针。2) 成功时为零(并将 
stream 值的副本写入 *newstreamptr ),失败时为非零(并写入空指针到 *newstreamptr ,除非 newstreamptr 自身为空指针)。注解
freopen 是一旦由 I/O 操作或 fwide 建立面向后,改变文件流窄/宽面向的唯一方式。
freopen 的 Microsoft CRT 版本在 filename 为空指针时不支持任何模式更改并将它当作错误(见文档)。可行的替代方案是非标准函数 _setmode() 。
示例
下列代码重定向 stdout 到文件。
运行此代码
输出:
stdout is printed to console
引用
- C11 标准(ISO/IEC 9899:2011):
- 7.21.5.4 The freopen function (第 307 页)
 
- K.3.5.2.2 The freopen_s function (第 590 页)
 
- C99 标准(ISO/IEC 9899:1999):
- 7.19.5.4 The freopen function (第 272-273 页)
 
- C89/C90 标准(ISO/IEC 9899:1990):
- 4.9.5.4 The freopen function
 
参阅
| (C11) | 打开文件 (函数) | 
| 关闭文件 (函数) |