freopen ()- 重定向打开的文件

格式

#include <stdio.h>
FILE *freopen(const char *filename, const char *mode, FILE *stream);

语言级别

ANSI

线程安全

描述

freopen() 函数关闭当前与 关联的文件,并将 重新分配给 filename指定的文件。 freopen() 函数打开与具有给定 方式 关联的新文件,这是一个字符串,用于指定为该文件请求的访问类型。 您还可以使用 freopen() 函数将标准流文件 stdinstdoutstderr 重定向到您指定的文件。

对于数据库文件,如果 filename 是空字符串,那么 freopen() 函数将关闭流并将其重新打开到新的打开方式,而不是将其重新分配到新的文件或设备。 可以使用未指定文件名的 freopen() 函数将标准流的方式从文本更改为二进制,而不重定向流,例如:

   fp = freopen("", "rb", stdin);

您可以使用相同的方法将方式从二进制更改为文本。

不能将带有 filenamefreopen() 函数用作使用 SYSIFCOPT (*IFSIO) 创建的模块中的空字符串。

返回值

freopen() 函数返回指向新打开的流的指针。 如果发生错误,那么 freopen() 函数将关闭原始文件并返回 NULL 指针值。

errno 的值可以设置为:
含义
EBADF
文件指针或描述符无效。
EBADMODE
指定的文件方式无效。
EBADNAME
指定的文件名无效。
ENOENT
无文件或库。
ENOTOPEN
文件未打开。
EIOERROR
发生了不可恢复的I/O错误。
EIORECERR
发生了可恢复的I/O错误。

示例

此示例关闭 stream1 数据流并重新分配其流指针。 stream1stream2 将具有相同的值,但它们不一定具有与 stream相同的值。
#include <stdio.h>
#define  MAX_LEN  100
 
int main(void)
{
   FILE *stream, *stream1, *stream2;
   char line[MAX_LEN], *result;
   int  i;
 
   stream = fopen("mylib/myfile","r");
   if ((result = fgets(line,MAX_LEN,stream)) != NULL)
       printf("The string is %s\n", result);
 
   /* Change all spaces in the line to '*'. */
   for (i=0; i<=sizeof(line); i++)
     if (line[i] == ' ')
         line[i] = '*';
 
   stream1 = stream;
   stream2 = freopen("", "w+", stream1);
   fputs( line, stream2 );
   fclose( stream2);
}

相关信息