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. 教你看懂网上流传的60行JavaScript代码俄罗斯方块游戏

    早就听说网上有人仅仅用60行JavaScript代码写出了一个俄罗斯方块游戏,最近看了看,今天在这篇文章里面我把我做的分析整理一下(主要是以注释的形式). 我用C写一个功能基本齐全的俄罗斯方块的话,大 ...

  2. 标题右边10px位置紧跟发布时间

    一个ul列表,拥有若干li,内容是新闻标题,标题右边10px位置紧跟发布时间,当标题过长需要控制标题width,需要兼容ie6,不能用max-width h4{font-size:14px;heigh ...

  3. 编写自己的Acunetix WVS漏洞扫描脚本详细教程

    AWVS提供了自定义的脚本编程接口,可是网上的资料很少,只有官方的几篇介绍和参考手册,最近研究了一下怎么编写AWVS的漏洞脚本来写一篇简单性的文章 本文以8.0为例,首先呢安装好Acunetix We ...

  4. editplus快速定位到文章头部和尾部

    经常用editplus发现有时文档比较长,要查找前面的内容时得一直滚动鼠标滚轮,或者拉动右侧边栏的导航标签,很少麻烦,有没有好的方法快速定位editplus到头部和尾部呢? 其实很简单,editplu ...

  5. The Dragon of Loowater

      The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, a minor nuisance turned into ...

  6. LayoutComponent类,用于layout的组件类。 LayoutComponent保存的所有用于布局的数据。

      LayoutComponent ()   默认构造函数 更多...     ~LayoutComponent ()   默认的析构函数 更多...     CREATE_FUNC (LayoutC ...

  7. CameraFacingBillboard

    原地址:http://www.cnblogs.com/88999660/ 描述 这个脚本使得它被连接到配合本身相机的对象.这对于要经常面对镜头,并以同样的方式了,因为它是有用的广告牌. 用法 将这个脚 ...

  8. unity3d中资源文件从MAX或者MAYA中导出的注意事项

    原地址:http://blog.sina.com.cn/s/blog_6ad33d3501011ekx.html 之前在项目中,没有怎么接触过美术的软件(之前的美术团队很犀利,被他们宠坏了).在自己公 ...

  9. ubuntu下git输出的颜色变化

    (这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 11点进家门,感觉很温暖哦. 以下是如何在用git的时候清晰的看出关键字的方法. $ vim ...

  10. python网络编程之最简单的单工通信

    tcp_server.py from socket import * server = socket(AF_INET, SOCK_STREAM) server.bind(('',12345)) ser ...