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

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

 

 头文件stdio.hios


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


       例:this

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

 参数说明spa


  filename: 文件名,用于存储输入输出的自定义文件名。例:"debug\\in.txt" ,能够是路径。操作系统

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

  stream: 一个文件,一般使用标准流文件。unix

    (这里的流不是C++中的概念,C++中的流是指对象,广义的流是指默认输入输出设备。在unix/linux系统中,全部东西均可以当作文件,因此默认输入输出设备也能够当作一个文件。指针

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

    其中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> 2 3 #include <iostream> 4 5 using namespace std; 6 7 8 9 int main() 10 11 { 12 13 FILE *fp; 14 15 fp = freopen("in.txt","r",stdin); //freopen() 的返回值,若是与文件链接创建失败,返回NULL 16 17 if(fp!=NULL){ //与文件链接创建成功 18 19 int a; 20 21 cin>>a; //从文件中读入数据 22 23 cout<<a<<endl; //在屏幕上显示数据 24 25 } 26 27 else //创建失败 28 29 cout<<"Open error!"<<endl; 30 31 return 0; 32 33 }

  

 详解:


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

       标准输入输出流文件包括 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(-1); 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

相关文章
相关标签/搜索