freopen()——重定向标准输入输出流

 头文件:stdio.h


 函数原型:FILE * freopen(const char *filename , const char *type ,  FILE *stream);


例:

freopen(“in.txt”,”r”,stdin);

freopen(“out.txt”,”w”,stdout);

 参数说明


  filename: 文件名,用于存储输入输出的自定义文件名。例:"debug\\in.txt" ,可以是路径。

  type: 文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。

  stream: 一个文件,通常使用标准流文件。

    (这里的流不是C++中的概念,C++中的流是指对象,广义的流是指默认输入输出设备。在unix/linux系统中,所有东西都可以看成文件,所以默认输入输出设备也可以看成一个文件。

    标准流文件具体是指stdin、stdout 和stderr。

    其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。)

 返回值:如果成功则返回该指向该stream 的指针,否则为NULL。


Ps:

FILE *fp;

fp = freopen(“in.txt”,”r”,stdin);

if (fp == NULL)     //可以用这种形式来判断与文件的连接是否建立成功

cout<<”Open error!”<<endl;

  功能


  实现重定向,把预定义的标准流文件定向到由path指定的文件中。

  例如默认的标准输入流(stdin)是指向键盘,现在可以利用freopen()函数让他重定向,指向为一个文件。

  这样本来从键盘输入的数据就可以从文件中读入了。

 使用举例:


 1 #include <stdio.h>

 #include <iostream>

 using namespace std;

 int main()

 {

        FILE *fp;      

        fp = freopen("in.txt","r",stdin);      //freopen() 的返回值,如果与文件连接建立失败,返回NULL

        if(fp!=NULL){       //与文件连接建立成功

               int a;

               cin>>a;                 //从文件中读入数据

               cout<<a<<endl;      //在屏幕上显示数据

        }

        else  //建立失败

               cout<<"Open error!"<<endl;

        return ;

 }

  

 详解:


这个函数的关键是对标准输入输出流文件进行重定义。

标准输入输出流文件包括 stdin 、stdou 、stderr。

那么“流”是什么呢?

流是一个文件。它包含了对设备的描述,操作系统可以通过它对设备进行操作。可以说,他是抽象化出来的物理设备,以文件的形式展现。例如,标准输入流stdin就代表了键盘,标准输出流stdout代表了屏幕。

再抽象化一点说,“流”相当于一个桥梁,它是系统与键盘屏幕等输入输出设备交流的渠道。例如,标准输入流stdin,它一端是键盘,另一端是键盘缓冲区,数据从物理的键盘通过stdin这座桥梁传送到了缓冲区里。电脑就可以对数据进行操作了。

而freopen ()的作用就是重定向这座桥梁(“流”)。将它的一端指向为另一个文件。这样就修改了数据的导向,原来数据可能从键盘中读入,现在可能变为了从文件中读入。

 返回默认的stdout/stdin


若要返回默认的stdout/stdin,使用以下调用:

  freopen(“CON”,“w”,stdout);  //输出到控制台“CON”

检查 freopen() 以确保重定向实际发生的返回值。

//来自“百度百科 - freopen”
//下面是短程序演示了 stdout 时重定向: /*Compile options needed: none*/
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
FILE *stream ; //将内容写到file.txt, "W"是写 ("r"是读)
if((stream = freopen("file.txt", "w", stdout)) == NULL)
exit(-);
printf("this is stdout output\n");
stream = freopen("CON", "w", stdout);/*stdout 是向程序的末尾的控制台重定向*/
printf("And now back to the console once again\n");
}

 文件打开方式总结


 字符串      含义

  "r"     以只读方式打开文本文件

  "w"     以只写方式打开文本文件,已存在的将被覆盖

  "a"      以只写方式打开文本,指针指向文件尾,原文件保留

  "+"      与上面的字符串组合,表以读写方式打开(还有这个)

  "b"      与上面的字符串组合,表打开二进制文件

Freecode : www.cnblogs.com/yym2013

freopen()——重定向标准输入输出流的更多相关文章

  1. Java标准输入输出流的重定向及恢复

    在Java中输入输出数据一般(图形化界面例外)要用到标准输入输出流System.in和System.out,System.in,System.out默认指向控制台,但有时程序从文件中输入数据并将结果输 ...

  2. 重定向输入输出流--freopen

    freopen是被包含于C标准库头文件<stdio.h>中的一个函数,用于重定向输入输出流.该函数可以在不改变代码原貌的情况下改变输入输出环境. C99函数声明: FILE *freope ...

  3. Java 输入/输出——重定向标准输入/输出

    在System类中提供了如下三个重定向标准输入/输出方法. static void setErr​(PrintStream err) Reassigns the "standard" ...

  4. Java重定向标准输入/输出

    在System类中提供了三个重定向标准输入/输出的方法static void setErr(PrintStream err) 重定向“标准”错误输出流static void setIn(InputSt ...

  5. C语言学习007:重定向标准输入和输出

    先来完成一个将输入数据转换成json格式输出的小任务 #include <stdio.h> int main(){ float latitude; float longtitude; ]; ...

  6. IO流(三)__字节流 标准输入输出流 转换流

    一.字节流:FileInputStream 和FileOutputStream 基本操作和字符流类相同,没有flush,但是close还是要的 复制一个字节流文件 private static voi ...

  7. 黑马程序员——JAVA基础之标准输入输出流

    ------- android培训.java培训.期待与您交流! ---------- 标准输入输出流: System中的基本字段,in,out 它们各代表了系统标准的输入和输出设备. 默认输入设备是 ...

  8. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  9. Java精选笔记_其他IO流(ObjectInputStream、DataInputStream、PrintStream、标准输入输出流)

    其他IO流 ObjectInputStream和ObjectOutputStream 如果希望永久将对象转为字节数据写入到硬盘上,即对象序列化,可以使用ObjectOutputStream(对象输出流 ...

随机推荐

  1. vagrant 启动错误

    Stderr: VBoxManage.EXE: error: Failed to create the VirtualBox object!VBoxManage.EXE: error: Code E_ ...

  2. Linux之convert命令

    Linux之convert命令 强大的convert命令 convert命令可以用来转换图像的格式,支持JPG, BMP, PCX, GIF, PNG, TIFF, XPM和XWD等类型,下面举几个例 ...

  3. --hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)

    解题思路: 多重背包:第 i 件物品有 j 个可用. 本题中 第 p[i] 类大米 有 c[i] 袋大米可买 ,故本题为多重背包. n(总钱数).m(种类) p[i] 单价 h[i] 重量 c[i] ...

  4. 锋利的jQuery-4--阻止事件冒泡和阻止默认行为

    阻止事件冒泡: 如果嵌套元素分别有自己的click事件,当点击内层元素时外层元素的事件也会被触发. $("span").bind("click", functi ...

  5. 快速搭建ssh(最终版)

    一个月又忘了.还是做个笔记.自己看下就能想起来... 1.在MyEclipse中新建web Project 2.首先整合struts

  6. Html Div 拖拽

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 使用 GDB 调试多进程程序

    使用 GDB 调试多进程程序 GDB 是 linux 系统上常用的调试工具,本文介绍了使用 GDB 调试多进程程序的几种方法,并对各种方法进行比较. 3 评论 田 强 (tianq@cn.ibm.co ...

  8. linux的设置ip连接crt,修改主机名,映射,建文件

    1.修改IP(或者vim vi /etc/sysconfig/network-scripts/ifcfg-eth0) 2.连接 crt 3.修改主机名 用vim 编辑 /etc/sysconfig/n ...

  9. git常见问题解决办法

    1,git status乱码 git config --global core.quotepath false 执行完后再使用时,就显示正常了

  10. 容易被忽略的CSS特性

    CSS初学感觉很简单,但随着学习的深入才感觉CSS的水由多深,平常总会遇到各种坑,先总结一些经常遇到的坑 大小写不敏感 虽然我们平时在写CSS的时候都是用小写,但其实CSS并不是大小写敏感的 .tes ...