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. 相关阅读:
        总结ORACLE学习8023
        set @CurrentID=@@IDENTITY
        一个IT人:跳槽一定要谨慎
        SQL Server数据库开发(转自CSDN)
        46个不得不知的生活小常识
        CodeProjectSome Cool Tips For .Net 之一
        数据库原理综合习题答案
        EDM
        CodeProject Some Cool Tips for .NET之二
        The operation is not valid for the state of the transaction.
      2. 原文地址:https://www.cnblogs.com/cyj1258/p/12185089.html
      Copyright © 2011-2022 走看看