zoukankan      html  css  js  c++  java
  • c++ 重定向

    1. 流类库
      1. 流库是用继承方法建立的输入输出类库
      2. 流库具有两个平行的基类:streambuf和ios类,所有流类均已两者之一作为基类
      3. streambuf类提供对缓冲区的低级操作:设置缓冲区,对缓冲区指针操作,向缓冲区存/取字符
      4. ios类以及派生类提供使用流类的接口,支持对streambuf的缓冲区输入/输出的格式化或者非格式化转换。
    2. 标准流
      1. 标准输入流cin输入到内存,标准输出流cout到屏幕
      2. 标准流为用户常用的外部设备提供与内存之间的通信通道,对数据进行解释和传输,提供必要的数据缓冲。
      3. cin:istream类的对象,通常连向键盘,可以重定向
      4. cout:ostream类的对象,通常连向显示器,可以重定向
      5. cerr:ostream类的对象,连向显示器,不可以重定向
      6. clog:ostream类的对象,连向打印机,不可以重定向
    3. c语言重定向到文件
      1. freopen(“data.in”, “r”, stdin);
        freopen(“data.out”, “w”, stdout);
        //这样就把标准输入重定向到了data.in文件,标准输出重定向到了data.out文件。
        //这两句代码之后,scanf函数就会从data.in文件里读,而printf函数就会输出到data.out文件里了。
    4. c++中流是一个对象,所以任何有流这种行为的对象也是流对象
      1. 流对象主要分为三种类型:
        1. istream: 主要是从流中执行输入操作
        2. ostream:主要是从流中执行输出操作
        3. iostream:主要是从流中执行输入输出操作
      2. 每个流对象都关联一个流buffer,程序一般从buffer中读取数据,所以如果要重定向流,只需要把buffer对象指向另外一个流即可
      3. 所有的流对象都关联了一个类成员数据streambuf,它就是stream的缓冲区(buffer)。C++读取输入输出的时候是从buffer中读取,而不是源数据流读取。
    5. 函数介绍
      1. stream_object.rdbuf(); //返回流对象buffer
        stream_object.rdbuf(streambuf * p); //绑定流对象buffer
        //如果不传参数,那么直接返回流对象的buffer指针。如果传递了某个流对象的
        //buffer指针,那么将当前的流对象绑定到那个传递过来的流对象的buffer上
    6. c++重定向到文件
    7. streambuf *backup;
      ifstream fin;
      fin.open("test.txt");
      backup = cin.rdbuf();   // 备份下 cin's streambuf
      cin.rdbuf(fin.rdbuf()); //  assign file’s streambuf to cin
      
      //恢复原来的输入流
      cin.rdbuf(backup);  // 把cin又重定向回了控制台
      //fin.close();
      1. 相关阅读:
        【Leetcode】Insertion Sort List JAVA实现
        【Leetcode】Sort List JAVA实现
        Maximum Product Subarray JAVA实现
        hadoop2.0中无法启动datanode的问题
        合并排序
        setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式
        postgresql 服务器端编程之hello word
        mac osx get postgresql path
        mac osx install mysql
        django 基于proxy实现用户权限管理
      2. 原文地址:https://www.cnblogs.com/cyj1258/p/12185089.html
      Copyright © 2011-2022 走看看