C 库 - freopen() 函数



C 库函数 FILE *freopen(const char *filename, const char *mode, FILE *stream) 将一个新的文件名与给定的打开流关联,同时关闭流中的旧文件。

语法

以下是 C 库函数 freopen() 的语法:

FILE *freopen(const char *filename, const char *mode, FILE *stream);

参数

以下是 C 库函数 freopen() 的括号内可以使用参数的列表:

  • filename : 指向一个空终止字符串的指针,指定要打开的文件名。如果 filename 为 NULL,freopen 函数尝试更改现有流的模式。
  • mode : 指向一个空终止字符串的指针,指定要打开文件的模式。此模式字符串可以是:
    • r : 以读取方式打开。
    • w : 以写入方式打开(将文件截断为零长度)。
    • a : 以追加方式打开(写入内容添加到文件末尾)。
    • r+ : 以读写方式打开。
    • w+ : 以读写方式打开(将文件截断为零长度)。
    • a+ : 以读写方式打开(写入内容添加到文件末尾)。
  • stream : 指向 FILE 对象的指针,指定要重新打开的流。此流通常与文件关联,但也可能是标准输入、输出或错误流 (stdin、stdout 或 stderr)。

返回值

成功时,freopen 返回指向 FILE 对象的指针。失败时,它返回 NULL 并设置全局变量 errno 以指示错误。

示例 1:将标准输出重定向到文件

此示例将标准输出 (stdout) 重定向到名为 output.txt 的文件。

以下是 C 库 freopen() 函数的示例:

#include <stdio.h>

int main() {
   FILE *fp = freopen("output.txt", "w", stdout);
   if (fp == NULL) {
       perror("freopen");
       return 1;
   }
   printf("This will be written to the file output.txt instead of standard output.\n");
   fclose(fp);
   return 0;
}

输出

上述代码在 output.txt 文件中生成以下结果:

This will be written to the file output.txt instead of standard output.

示例 2:将标准输入重定向到文件

此示例将标准输入 (stdin) 重定向到从名为 input.txt 的文件读取,并将内容打印到标准输出。

#include <stdio.h>

int main() {
   FILE *fp = freopen("input.txt", "r", stdin);
   if (fp == NULL) {
       perror("freopen");
       return 1;
   }

   char buffer[100];
   while (fgets(buffer, sizeof(buffer), stdin) != NULL) {
       printf("%s", buffer);
   }

   fclose(fp);
   return 0;
}

输出

执行上述代码后,我们在终端得到以下结果,并且 input.txt 的内容保持不变:

Line 1: This is the first line.
Line 2: This is the second line.
广告