c++11 标准模板(STL)(std::basic_filebuf)(八)

news2024/12/30 2:25:53

定义于头文件 <fstream>

template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_filebuf : public std::basic_streambuf<CharT, Traits>

std::basic_filebuf 是关联字符序列为文件的 std::basic_streambuf 。输入序列和输出序列都关联到同一文件,并为两种操作维护连接文件位置。

函数 underflow() 和 overflow()/sync() 进行文件和缓冲区的获取放置区之间的实际 I/O 。 CharT 不是 char 时,多数实现在文件存储多字节字符,并用 std::codecvt 平面进行宽/多字节字符转换。

亦为常用字符类型定义二个特化:

类型定义
filebufbasic_filebuf<char>
wfilebufbasic_filebuf<wchar_t>

 

受保护成员函数

用绝对寻址重寻位文件位置

std::basic_filebuf<CharT,Traits>::seekpos
protected:

virtual pos_type seekpos( pos_type sp,

                          std::ios_base::openmode which = std::ios_base::in | std::ios_base::out );

若可能,则重寻位文件指针到 sp 所指示的位置。

若关联文件未打开( is_open()==false ),则立即失败。

若文件为写入打开,则首先用 overflow() 写入放置区和任何当前感染的 locale 所要求的反迁移序列。

然后如同通过调用 std::fsetpos() 重寻位指针。

若文件为读取打开,则若需要则更新获取区。

sp 不是由在同一文件上调用 seekoff() 或 seekpos() 获得,则行为未定义。

参数

sp-之前在同一文件上调用 seekoff() 或 seekpos() 获得的文件位置
which-确定要影响输入和/或输出序列的哪个。它能为下列常量之一或其组合:
常量解释
in影响输入序列
out影响输出序列

返回值

成功时为 sp ,失败时为 pos_type(off_type(-1)) 。

注意

seekpos() 为 std::basic_streambuf::pubseekpos() 所调用,后者为 std::basic_istream::seekg() 和 std::basic_ostream::seekp() 的单参数版本调用。

许多实现不于 seekpos() 中更新获取区,而是委托给下次 sgetc() 所调用的 underflow() 。

 调用示例

#include <fstream>
#include <iostream>

struct mybuf : std::filebuf
{
    pos_type seekpos(pos_type sp, std::ios_base::openmode which)
    {
        std::cout << "Before seekpos(" << sp << "), size of the get area is "
                  << egptr() - eback() << " with "
                  << egptr() - gptr() << " read positions available\n";
        pos_type rc = std::filebuf::seekpos(sp, which);
        std::cout << "seekpos() returns " << rc << ".\nAfter the call, "
                  << "size of the get area is "
                  << egptr() - eback() << " with "
                  << egptr() - gptr() << " read positions available\n";
// 若 seekpos() 清空获取区则反注释
//         std::filebuf::underflow();
//         std::cout << "after forced underflow(), size of the get area is "
//                   << egptr()-eback() << " with "
//                   << egptr()-gptr() << " read positions available\n";
        return rc;
    }
};

int main()
{
    mybuf buf;
    buf.open("test.txt", std::ios_base::in);
    std::istream stream(&buf);
    stream.get(); // 读一个字符以强制 underflow()
    stream.seekg(2);
}

输出

 

从放置区写字符到关联文件

std::basic_filebuf<CharT,Traits>::sync

protected:
virtual int sync()

若放置区存在(例如文件为写入打开),则调用 overflow() 写入所有未处理输出到文件,然后如同以调用 std::fflush 冲入文件。

若获取区存在(例如文件为读取打开),则效果是实现定义的。典型实现可能清空获取区,并将当前文件位置后移对应的字节数。

参数

(无)

返回值

成功情况下为 ​0​ ,失败情况下为 -1 。

注意

对于输出流, close() 、 seekoff() 和 seekpos() 隐式调用,而 std::basic_streambuf::pubsync() 显式调用 sync() 或其等价内容。

 

更改关联的本地环境

std::basic_filebuf<CharT,Traits>::imbue

protected:
virtual void imbue( const std::locale& loc )

更改关联的本地环境,使得此调用后(和另一 imbue() 调用前)所有插入或释出的字符以 loc 的 std::codecvt 平面转换。

若旧 locale 的编码依赖状态,且文件未被寻位到起始,则新的 locale 必须与先前感染者拥有相同的 std::codecvt 平面。

参数

loc-要与流感染的 locale

返回值

(无)

非成员函数

特化 std::swap 算法

std::swap(std::basic_filebuf)
template< class CharT, class Traits >

void swap( std::basic_filebuf<CharT,Traits>& lhs,

           std::basic_filebuf<CharT,Traits>& rhs );
(C++11 起)

 为 std::basic_filebuf 特化 std::swap 算法。交换 lhsrhs 的内部状态。等效地调用 lhs.swap(rhs) 。

参数

lhs, rhs-要交换状态的 std::basic_filebuf 对象

返回值

(无)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/806808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【力扣每日一题】2023.7.29 环形链表

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个链表&#xff0c;让我们判断这个链表是否有环。我们可以直接遍历这个链表&#xff0c;最后能走到链表末尾也就是空指针那就…

Go语言进阶语法八万字详解,通俗易懂

文章目录 File文件操作FileInfo接口权限打开模式File操作文件读取 I/O操作io包 文件复制io包下的Read()和Write()io包下的Copy()ioutil包总结 断点续传Seeker接口断点续传 bufio包bufio包原理Reader对象Writer对象 bufio包bufio.Readerbufio.Writer ioutil包ioutil包的方法示例…

wps图表怎么改横纵坐标,MLP 多层感知器和CNN卷积神经网络区别

目录 wps表格横纵坐标轴怎么设置&#xff1f; MLP (Multilayer Perceptron) 多层感知器 CNN (Convolutional Neural Network) 卷积神经网络 多层感知器MLP&#xff0c;全连接网络&#xff0c;DNN三者的关系 wps表格横纵坐标轴怎么设置&#xff1f; 1、打开表格点击图的右侧…

LeetCode559. N 叉树的最大深度

559. N 叉树的最大深度 文章目录 [559. N 叉树的最大深度](https://leetcode.cn/problems/maximum-depth-of-n-ary-tree/)一、题目二、题解方法一&#xff1a;迭代方法二&#xff1a;递归 一、题目 给定一个 N 叉树&#xff0c;找到其最大深度。 最大深度是指从根节点到最远叶…

互联网医院建设|互联网医疗系统|互联网医院开发功能及特点

互联网医院是一种通过互联网技术与医疗服务相结合的创新模式。它可以让患者在家中或办公室&#xff0c;通过智能终端与医生进行在线咨询、预约挂号、开具电子处方等。这种模式打破了传统医疗的时间与空间限制&#xff0c;为患者提供了更为便捷、高效的医疗服务。 互联网医院功能…

LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

1、问题&#xff1a; https://github.com/CocoaPods/Specs.git/&#xff1a;LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443的解决办法 出现这个问题的原因基本都是代理的问题&#xff1a; 只需要加上代理就可以了&#xff1a; #http代理 git conf…

算法39:Excel 表列序号

一、需求 给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1&#xff1a; 输入: columnTitle “A” 输出: 1 示例 2&…

Elasticsearch:通过动态修剪实现更快的基数聚合

作者&#xff1a;Adrien Grand Elasticsearch 8.9 通过支持动态修剪&#xff08;dynamic pruning&#xff09;引入了基数聚合加速。 这种优化需要满足特定的条件才能生效&#xff0c;但一旦实现&#xff0c;通常会产生惊人的结果。 我们观察到&#xff0c;通过此更改&#xff0…

向量vector与sort()

运行代码&#xff1a; //向量与sort() #include"std_lib_facilities.h" //声明Item类 struct Item {string name;int iid;double value;friend istream& operator>>(istream& is, Item& ii);friend ostream& operator<<(ostream& o…

阿里 120W 年薪架构师力荐 750 页微服务架构深度解析笔记

前言 当前&#xff0c;微服务架构在国内正处于蓬勃发展的阶段&#xff0c;无论是大型互联网公司还是传统的 IT 企业&#xff0c;纷纷采用微服务架构构建系统。 在过去几年里&#xff0c;DevOps、云原生、面向演进式架构等理念已经深入人心&#xff0c;围绕微服务生态也出现了…

导致内存泄漏的因素及解决方式

导致内存泄漏的因素 一、全局变量 因为全局变量不被js垃圾回收机制所回收&#xff0c;所以在使用全局变量时要小心。避免在想使用局部变量因为疏忽导致该变量流失到全局&#xff0c;如未声明变量&#xff0c;却直接对其进行赋值&#xff0c;就会导致该变量在全局创建&#xf…

Python Numpy入门基础(一)创建数组

入门基础&#xff08;一&#xff09; 创建数组 1- np.array() 参数众多&#xff0c;初学时只要关注基本用法。 array(...)array(object, dtypeNone, *, copyTrue, orderK, subokFalse, ndmin0,likeNone)Create an array.Parameters----------object : array_likeAn array, …

CAN通信协议

CAN 物理电平 以高速CAN为例 有电压差&#xff08;2.5V&#xff09;为显性&#xff0c;逻辑0无电压差为隐性&#xff0c;逻辑1 帧结构 SOF 恒为显性&#xff0c;逻辑0 仲裁段 当有多个设备发送数据&#xff0c;产生总线冲突时&#xff0c;来判断一个先后顺序由于总线是线与…

重学C++系列之友元

一、什么是友元 在C中&#xff0c;为了提高程序的效率&#xff0c;在一些场景下&#xff0c;引入友元&#xff0c;但同时类的封装性就会被破坏。 二、怎么实现友元 友元关键字&#xff08;friend&#xff09; // 在类中声明另一个类的成员函数来做为友元函数 // 以关键字&…

golangd\pycharm-ai免费代码助手安装使用gpt4-免费使用--[推荐]

golangd-ai免费代码助手安装使用,pycharm可以使用&#xff0c;估计只要是xx的ide都是可以使用这个插件 目前GPT4以及gpt的大规模使用&#xff0c;如何快速掌握以及在ide中快速使用的办法&#xff0c;今天安装一款golangd编辑器的插件已经使用 一、安装以及使用 1.在golangd中…

texshop mac中文版-TeXShop for Mac(Latex编辑预览工具)

texshop for mac是一款可以在苹果电脑MAC OS平台上使用的非常不错的Mac应用软件&#xff0c;texshop for mac是一个非常有用的工具&#xff0c;广泛使用在数学&#xff0c;计算机科学&#xff0c;物理学&#xff0c;经济学等领域的合作&#xff0c;这些程序的标准tetex分布特产…

PKG内容查看工具:Suspicious Package for Mac安装教程

Suspicious Package Mac版是一款Mac平台上的查看 PKG 程序包内信息的应用&#xff0c;Suspicious Package Mac版支持查看全部包内全部文件&#xff0c;比如需要运行的脚本&#xff0c;开发者&#xff0c;来源等等。 suspicious package mac使用简单&#xff0c;只需在选择pkg安…

Druid连接池与Mybatis-Plus非Spring环境整合:报错异常:NoClassDefFoundError

最近在搞一个Netty与扫描枪通信项目;通过调研框架使用Mybatis-PlusDruid作为获取数据库数据,结果整合报了个错,顺便记录下: 一&#xff0c;配置文件: driverClassNamecom.mysql.cj.jdbc.Driver urljdbc:mysql://127.0.0.1:3306/xxxxxxx?useUnicodetrue&characterEncodin…

SQL编译优化原理

最近在团队的OLAP引擎上做了一些SQL编译优化的工作&#xff0c;整理到了语雀上&#xff0c;也顺便发在博客上了。SQL编译优化理论并不复杂&#xff0c;只需要掌握一些关系代数的基础就比较好理解&#xff1b;比较困难的在于reorder算法部分。 文章目录 基础概念关系代数等价 j…

面试 | 校招字符串相关高频算法题汇总【C++实现】

文章目录 1、反转字符串2、反转字符串||3、字符串最后一个单词的长度4、找字符串中第一个只出现一次的字符5、仅仅反转字母6、验证一个字符串是否是回文7、反转字符串中的单词【⭐】&#xff08;1&#xff09;移除给出字符串中的多余空格&#xff08;2&#xff09;反转整个字符…