C语言stdio头文件(stdio.h)中freopen函数的用法及代码示例。
用法:
FILE * freopen ( const char * filename, const char * mode, FILE * stream );
重新打开具有不同文件或模式的流
如果是新的文档名称指定后,该函数首先尝试关闭已经与之关联的任何文件流(第三个参数)并将其取消关联。然后,无论该流是否成功关闭,freopen打开由指定的文件文档名称并将其与流正如fopen会使用指定的模式。
如果文档名称是一个空指针,该函数尝试更改模式流。尽管允许特定的库实现来限制所允许的更改,以及在哪种情况下。
这个错误指示和有效指标会自动清除(好像clearerr被称为)。
此函数对于重定向预定义的流特别有用,例如stdin,stdout和stderr到特定文件(请参见下面的示例)。
参数
- filename
- C字符串,包含要打开的文件的名称。
其值应遵循运行环境的文件名规范,并且可以包含路径(如果系统支持)。
如果此参数为空指针,则该函数尝试更改该模式的模式。流,就好像使用了当前与该流关联的文件名一样。
- mode
- 包含文件访问模式的C字符串。有可能:
随着模式文件上方的说明符以文本文件。为了打开一个文件二进制文件, 一种"b"字符必须包含在模式细绳。这个额外的"b"字符可以附加在字符串的末尾(因此采用以下复合模式:"rb","wb","ab","r+b","w+b","a+b")或插入字母和字符之间。"+"混合模式("rb+","wb+","ab+")的符号。"r" 读:打开文件进行输入操作。该文件必须存在。 "w" 写:创建一个空文件进行输出操作。如果已经存在同名文件,则将其内容丢弃,并将该文件视为新的空文件。 "a" 附加:打开文件以在文件末尾输出。输出操作始终将数据写入文件的末尾,然后对其进行扩展。重新定位操作(fseek,fsetpos,rewind)将被忽略。如果文件不存在,则创建该文件。 "r+" 读取/更新:打开文件进行更新(用于输入和输出)。该文件必须存在。 "w+" 写入/更新:创建一个空文件并将其打开以进行更新(用于输入和输出)。如果已经存在同名文件,则将其内容丢弃,并将该文件视为新的空文件。 "a+" 追加/更新:打开一个文件进行更新(用于输入和输出),所有输出操作均在文件末尾写入数据。重新定位操作(fseek,fsetpos,rewind)会影响下一个输入操作,但输出操作会将位置移回文件末尾。如果文件不存在,则创建该文件。
新的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语言 remove用法及代码示例
- C语言 rename用法及代码示例
- C语言 tmpfile用法及代码示例
- C语言 tmpnam用法及代码示例
- C语言 fclose用法及代码示例
- C语言 fflush用法及代码示例
- C语言 fopen用法及代码示例
- C语言 setbuf用法及代码示例
- C语言 setvbuf用法及代码示例
- C语言 fprintf用法及代码示例
- C语言 fscanf用法及代码示例
- C语言 printf用法及代码示例
- C语言 scanf用法及代码示例
- C语言 snprintf用法及代码示例
- C语言 sprintf用法及代码示例
- C语言 sscanf用法及代码示例
- C语言 vfprintf用法及代码示例
- C语言 vfscanf用法及代码示例
- C语言 vprintf用法及代码示例
- C语言 vscanf用法及代码示例
- C语言 vsnprintf用法及代码示例
- C语言 vsprintf用法及代码示例
- C语言 vsscanf用法及代码示例
- C语言 fgetc用法及代码示例
- C语言 fgets用法及代码示例
- C语言 fputc用法及代码示例
- C语言 fputs用法及代码示例
- C语言 getc用法及代码示例
- C语言 getchar用法及代码示例
- C语言 gets用法及代码示例
- C语言 putc用法及代码示例
- C语言 putchar用法及代码示例
- C语言 puts用法及代码示例
- C语言 ungetc用法及代码示例
- C语言 fread用法及代码示例
- C语言 fwrite用法及代码示例
- C语言 fgetpos用法及代码示例
- C语言 fseek用法及代码示例
- C语言 fsetpos用法及代码示例
- C语言 ftell用法及代码示例
- C语言 rewind用法及代码示例
- C语言 clearerr用法及代码示例
- C语言 feof用法及代码示例
- C语言 ferror用法及代码示例
- C语言 perror用法及代码示例
注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C freopen function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。