9.1.4 文件流的重定向
在 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 中。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论