返回介绍

9.1.4 文件流的重定向

发布于 2025-04-11 22:33:05 字数 1439 浏览 0 评论 0 收藏

在 C 语言中,还可以使用文件流重定向的方式来改变文件流所关联的文件。这就需要使用 freopen 函数,该函数原型如下:

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

freopen 函数的前两个参数和 fopen 函数的参数意义相同,第三个参数 stream,即是需要重定向的文件流。freopen 函数的返回值为重定向之后的新的文件流,如果重定向失败则为空指针。freopen 函数的功能就是将文件流 stream 关联到以 mode 模式打开的 fname 文件上。

可以将标准输出流重定向,让其关联到 D 盘的 test.txt 文件上。这样再使用 printf、putchar、puts 等函数进行打印输出,就不会再显示到控制台窗口,而是写入到 D 盘的 test.txt 文件中。例如:

freopen("D:\\test.txt", "w", stdout);
printf("Hello");
putchar(' ');
puts("World");

在 freopen 语句中,第三个参数是 stdout,表示需要重定向的是标准输出流,而第一个参数字符串指定了所关联的文件,第二个参数字符串指定了所关联文件的打开模式,由于输出流是往文件中写入数据,所以,这里使用的是“w”模式。

编译运行程序,会发现在控制台窗口上无任何信息。打开 D 盘上的 test.txt 文件,可看到有如下内容:

Hello World

也可以将标准输入流重定向,让其关联到 D 盘的 test.txt 文件上。这样再使用 scanf、gettchar、gets 等函数获取数据的时候,就不会再到控制台窗口上去获取由键盘输入的数据,而是到了 D 盘的 test.txt 文件中去获取数据。例如:

char ch1, ch2;
char str[100];
freopen("D:\\test.txt", "r", stdin);
scanf("%c", &ch1);
ch2 = getchar();
gets(str);
printf("ch1:%c\nch2:%c\nstr:%s\n", ch1, ch2, str);

在 freopen 语句中,第三个参数是 stdin,表示需要重定向的是标准输入流,由于需要读取数据,因此,模式字符串使用的是“r”。

编译运行程序,结果如下:

ch1:H
ch2:e
str:llo World

可见,通过对标准输入流的重定向之后,scanf、getchar 和 gets 函数都变为从 D 盘的 test.txt 文件获取数据。其中由 scanf 函数获取了第一个字符“H”保存到变量 ch1 中,由 getchar 函数获取了第 2 个字符“e”保存到变量 ch2 中,由 gets 函数获取剩余的字符,然后组成字符串“llo World”保存到字符数组 str 中。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。