当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 freopen用法及代码示例


C语言stdio头文件(stdio.h)中freopen函数的用法及代码示例。

用法:

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

如果是新的文档名称指定后,该函数首先尝试关闭已经与之关联的任何文件(第三个参数)并将其取消关联。然后,无论该流是否成功关闭,freopen打开由指定的文件文档名称并将其与正如fopen会使用指定的模式

如果文档名称是一个空指针,该函数尝试更改模式流。尽管允许特定的库实现来限制所允许的更改,以及在哪种情况下。

这个错误指示有效指标会自动清除(好像clearerr被称为)。

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

参数

filename
C字符串,包含要打开的文件的名称。
其值应遵循运行环境的文件名规范,并且可以包含路径(如果系统支持)。
如果此参数为空指针,则该函数尝试更改该模式的模式。,就好像使用了当前与该流关联的文件名一样。
mode
包含文件访问模式的C字符串。有可能:
"r"读:打开文件进行输入操作。该文件必须存在。
"w"写:创建一个空文件进行输出操作。如果已经存在同名文件,则将其内容丢弃,并将该文件视为新的空文件。
"a"附加:打开文件以在文件末尾输出。输出操作始终将数据写入文件的末尾,然后对其进行扩展。重新定位操作(fseek,fsetpos,rewind)将被忽略。如果文件不存在,则创建该文件。
"r+"读取/更新:打开文件进行更新(用于输入和输出)。该文件必须存在。
"w+"写入/更新:创建一个空文件并将其打开以进行更新(用于输入和输出)。如果已经存在同名文件,则将其内容丢弃,并将该文件视为新的空文件。
"a+"追加/更新:打开一个文件进行更新(用于输入和输出),所有输出操作均在文件末尾写入数据。重新定位操作(fseek,fsetpos,rewind)会影响下一个输入操作,但输出操作会将位置移回文件末尾。如果文件不存在,则创建该文件。
随着模式文件上方的说明符以文本文件。为了打开一个文件二进制文件, 一种"b"字符必须包含在模式细绳。这个额外的"b"字符可以附加在字符串的末尾(因此采用以下复合模式:"rb","wb","ab","r+b","w+b","a+b")或插入字母和字符之间。"+"混合模式("rb+","wb+","ab+")的符号。

新的C标准(不属于C++的C2011)添加了新的标准子说明符("x"),可以附加到任何"w"说明符(形成"wx""wbx""w+x"或者"w+bx"/"wb+x")。如果文件存在,此子说明符将强制该函数失败,而不是覆盖它。

如果遵循此顺序,则其他行为取决于库的实现:某些实现可能会忽略其他字符,例如,"t"(有时用于明确声明一个文本文件)被接受。

在某些库实现中,以更新模式打开或创建文本文件可能会将流视为二进制文件。
stream
指向一个的指针FILE标识要重新打开的流的对象。


返回值

如果文件成功重新打开,该函数将返回作为参数传递的指针,可用于识别重新打开的流。
否则,将返回空指针。
在大多数库实现中,errno变量也会在失败时设置为system-specific错误代码。

示例

/* 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.

相关用法


注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C freopen function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。