• 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. 相关阅读:
        年薪30W的软件测试“老司机”工作经验
        软件测试的痛点有哪些?
        学会高效管理时间,健康工作
        一周面试十家公司,分享面试经历
        电子公文传输系统安全进展二
        常用国外会议出版社及出版社地址
        linux中wget命令
        python中 从gff文件提取指定基因信息
        R语言中空值NA、""、NULL的区别
        python 中列出指定目录中文件的绝对路径
      2. 原文地址:https://www.cnblogs.com/cyj1258/p/12185089.html
      Copyright © 2020-2023  润新知