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. insert 多个values

    INSERT INTO `user_mail_attach` VALUES(, , , , , ), (, , , , , ); 这种比写多条insert语句效率高

  2. Java初学(八)

    一.图解String类创建对象及赋值 面试题: 二.String.StringBuffer.StringBuilder区别 1.String内容不可变,而StringBuffer.StringBuil ...

  3. go tool proof

    echo list | go tool pprof -alloc_space gateway http://10.2.1.93:8421/debug/pprof/heap > abc.log e ...

  4. WINDOWS渗透与提权总结(1)

    旁站路径问题: 1.读网站配置. 2.用以下VBS: 01 On Error Resume Next 02   03 If (LCase(Right(WScript.Fullname, 11)) = ...

  5. iOS-AFN "Request failed: unacceptable content-type: text/plain"

    今天使用AFN测试程序时,返回如下错误 这是由于AFN默认不支持http返回结果为"text/plain"这种类型所致. 解决办法: 找到AFN框架中的AFURLResponseS ...

  6. Usermod 命令详解 ------工作中修改shell时用 usermod -s /bin/csh home

     Usermod 命令详解 2012-09-11 11:01:36 标签:usermod 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.htt ...

  7. MVC中使用WebMail 发送注册验证信息

    在MVC中发送Email 可以使用WebMail :使用起来十分简单.如下: WebMail.SmtpServer = ConfigurationHelper.GetValue("SmtpS ...

  8. HDOJ 1083 Courses

    Hopcroft-Karp算法模板 Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  9. 用firebug给firefox添加信任链接

    在前文“firefox查看微信公众平台的数据分析时就出现不信任链接怎么办?”我们使用了导入证书的方法添加信任链接,有网友反映说证书导入不成功,这里用另外一种方法来实现:用firebug给firefox ...

  10. 畅通工程再续(MST)

    畅通工程再续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...