Home C&C++函数库 c++ 语法 程序源码 Linux C库

freopen

函数  <cstdio>

FILE * freopen ( const char * filename, const char * mode, FILE * stream );
以不同的文件或模式重新打开流
重新用流打开由filename(文件名)指定的文件或更改其访问mode(模式)。

如果指定了一个新的文件名,函数首先尝试关闭任何已经与stream关联的文件 (第三个参数)并将其解关联。然后,不管流是否成功关闭, freopen打开filename指定的文件并将其与流关联起来,就像fopen使用指定的模式一样。
如果filename是空指针,函数将尝试更改流的模式。尽管特定的库实现可以限制允许的更改,以及在什么情况下允许.

错误指示器和eof指示器被自动清除(就像调用了clearerr一样)。

这个函数对于将预定义的流(如stdinstdoutstderr)重定向到特定的文件特别有用(参见下面的示例)。

☲  参数


filename
C字符串,包含要打开的文件的名称。
其值应遵循运行环境的文件名规范,并可以包含路径(如果系统支持)。
如果此参数为空指针,则函数将尝试更改流的模式,就好像当前与该流关联的文件名已被使用一样。
mode
包含文件访问模式的C字符串。它可以是:
"r" read : 打开文件进行输入操作。文件必须存在。
"w" write : 为输出操作创建一个空文件。如果同名文件已经存在,则其内容将被丢弃, 并将该文件作为一个新的空文件处理。
"a" append : 打开文件并在文件末尾输出。输出操作总是将数据写在文件的末尾, 将其展开。重定位操作(fseek, fsetpos, rewind)被忽略。如果文件不存在,则创建该文件。
"r+" 读取/更新 : 打开一个文件进行更新(用于输入和输出)。文件必须存在。
"w+" 写/更新 : 创建一个空文件并打开它进行更新(用于输入和输出)。 如果同名文件已经存在,则其内容将被丢弃,并将该文件作为一个新的空文件处理。
"a+" append/update:打开一个文件进行更新(包括输入和输出), 将所有的输出操作写入文件的末尾。重定位操作(fseek, fsetpos, rewind) 影响下一个输入操作,但输出操作将位置移回文件末尾。如果文件不存在,则创建该文件。
使用上面的模式说明符,文件将作为文本文件打开。

为了以二进制文件的形式打开文件,模式字符串中必须包含一个“b”字符。

这个额外的“b”字符可以被附加在字符串的末尾(这样就形成了以下复合模式: “rb”,“wb”,“ab”,“r+b”,“w+b”,“a+b”) 或者插入字母和“+”符号之间的混合模式(“rb+”,“wb+”,“ab+”)。

新的C标准(C2011,不是c++的一部分)增加了一个新的标准子说明符("x"), 它可以被附加到任何"w"说明符(形成"wx", "wbx", "w+x"或"w+bx"/"wb+x")。 如果文件存在,这个子说明符强制函数失败,而不是覆盖它。

如果序列后面有额外的字符,则行为取决于库的实现: 一些实现可能会忽略额外的字符,以便接受额外的“t”(有时用于显式声明文本文件)。

在某些库实现中,打开或创建具有更新模式的文本文件可能会将流视为二进制文件。

stream
指向FILE对象的指针,该对象标识要重新打开的流。

☉  返回值



如果文件成功重新打开,该函数将返回作为参数stream传递的指针,该参数stream可用于标识重新打开的流。

否则,返回一个空指针。
在大多数库实现中,errno变量也会在出现故障时设置为系统特定的错误代码。

☣  示例



/* freopen example: redirecting stdout */
#include <stdio.h>

int main ()
{
  freopen ("myfile.txt","w",stdout);
  printf ("This sentence is redirected to a file.");
  fclose (stdout);
  return 0;
}

这个示例代码将通常会进入标准输出的输出重定向到一个名为myfile.txt的文件,该文件在程序执行后包含:

This sentence is redirected to a file

🍄  另请参阅



fclose 关闭文件(function )
fflush 刷新流 (function )
fopen 打开文件(function )

联系我们 免责声明 关于CandCplus 网站地图