IO 知识笔记

  IO条件状态

  IO标准库管理一系列条件状态(condition state)成员,用来标记给定的IO对象是否处于可用状态,或者碰到了那种特定的错误。

  IO标准库的条件状态如下:

    

strm::iostate   机器相关的整型名,由各个iostream类定义,用于定义条件状态
strm::badbit    strm::badbit 类型的值,用于指出被破坏的流
strm::failbit     strm::failbit  类型的值,用于指出失败的IO操作
strm::eofbit     strm::eofbit 类型的值,用于指出流已经到达文件结束符

s.eof()            如果设置了流s的eofbit值,则该函数返回true
s.fail()            如果设置了流s的failbit值,则该函数返回true
s.bad()           如果设置了流s的badbit值,则该函数返回true

s.good()          如果流s处于有效状态,则该函数返回true

s.clear()          将流s中的所有状态都重设为有效状态
s.clear(flag)     将流s中的某个指定状态设置为有效,flag 的类型是strm::iostate

s.setstate(flag)  给流s添加指定条件。flag的类型是strm::iostate

s.rdstate()          返回流s的当前条件,返回值类型为strm::iostate

badbit 标志着系统级的故障,如无法恢复的读写错误。如果出现该类错误,通常标志着该流无法继续使用了。

failbit  一般为可以修正的错误,如期待接受数值类型数据却输入了字符。

一般来讲,如果出现failbit等错误后需要修正是,需要清空缓冲区中不合法的数据,

比如用

cin.clear(istream::failbit)

重置failbit状态后,用cin.ignore()函数清除错误数据

cin.ignore(std::numeric_limits<std::streamsize>::max(),‘\n‘);

cin.ignore 的作用是从流中提取数据,被提取的数据将被忽略。

第一个参数是一个数字,如果提取的字节数达到这个数字或者遇到第二个参数‘\n‘,则函数执行终止。因此为了保证提取流中的字节时能够匹配到‘\n‘,

一般要将第一个参数的数值取到足够大。

    输出缓冲区的刷新

  

            cout << "hello" << flush;        //flushes the buffer ;adds no data
            cout << "hello" << ends;        //insert a null ,then flushes the buffer
            cout << "hello" << endl;        // insert a newline ,then flushes the buffer

    如果程序崩溃了,则不会刷新缓冲区。

    

    标准库将cout 与 cin 捆绑在一起,即任何读取输入流的尝试都会导致与其相关联的输出流缓冲区被首先刷新。

    cin >> ival;

    导致cout关联的缓冲区被刷新。

时间: 2024-08-02 07:00:18

IO 知识笔记的相关文章

网络连接相关基础知识笔记

一.常说的TCP/IP的含义 TCP/IP协议簇并不仅仅指TCP协议和IP协议,实际它包括了一系列协议组成的集合,如:TCP,IP,UDP,FTP,SMTP,DNS,ARP,PPP等 TCP与UDP协议都属于传输层协议,但有很大不同,TCP是面向连接的协议,提供的是可靠的数据流服务,TCP采用"带重传的肯定确认"机制来实现传输的可靠性,实现了一种"虚电路",因为从物理上来说,并不是真正在两台主机间建立了连接,这种连接只是存在于逻辑上的.最大的开销出现在通信前建立连接

Java IO学习笔记:概念与原理

Java IO学习笔记:概念与原理 一.概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了流,然后将这些流还可以写到另外的目的地(文件.内存.控制台.网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分. 二.分类 流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕.流分类的方式很多: 1.按照输入的方向分,输入流和输出流,输入输出的参照对象是Java程序. 2.

【DAY12】第十二天集合&泛型&IO学习笔记

hash:散列 ------------------ Hashset集合内部是通过HashMap进行实现的.使用的是HashMap中key部分. 对象在添加进集合中时,首选会对hashcode进行处理(hashcode右移16位和 自身做异或运算)得到一个经过处理的hash值,然后该值和集合的容量进行 &运算,得到介于0和集合容量值之间一个数字.该数字表示着数组的下标. 也就是该元素应该存放在哪个元素中. Map与Collection -------------- Map与Collection在

黑马程序员---Objective-C基础学习---类、对象、方法相关知识笔记

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 类.对象.方法相关知识笔记 Objective-C相对于C语言有了面向对象的特性,但是ObjC又没有其他面向对象语言那么多语法特性,ObjC本身对面向对象进行了精简.下面是一些相关知识笔记. 类定义 成员变量 方法和属性 self关键字 类定义 在C#.Java等其他高级语言中定义一个类是相当简单点的,直接一个关键字class加一对大括号基本就完成了,但是在ObjC中类的定义相对变化比较大.现

Elasticsearch集群知识笔记

Elasticsearch集群知识笔记 Elasticsearch内部提供了一个rest接口用于查看集群内部的健康状况: curl -XGET http://localhost:9200/_cluster/health response结果: { "cluster_name": "format-es", "status": "green", ... } 这里的status有3种状态,分别是green(所有主分片和复制分片都可用

原生ajax基础知识笔记

原生ajax基础知识笔记 1.创建 XMLHttpRequest 对象 所有现代浏览器(IE7+.Firefox.Chrome.Safari 以及 Opera)均内建 XMLHttpRequest 对象. 老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveXObject. 代码示例: // Creates a XMLHttpRequest object. var xhr = new XMLHttpRequest(); 兼容浏览器代码示例: var xhr; /

Oracle基础知识笔记(10) 约束

大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了.如图 Oracle基础知识笔记(10) 约束

Oracle基础知识笔记(11) 建表、更新、查询综合练习

有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓名和所属系别不能为空: 积分要第为空值,要么为6,4

《深入Linux内核架构》附录A&lt;体系结构相关知识&gt;笔记

A.1 概述 为便于扩展到新的体系结构,内核严格隔离了体系结构相关和体系结构无关的代码.内核中特定于处理器的部分,包含定义和原型的头文件保存在include/asm-arch/(例如,include/asm-arm/)目录下,而C语言和汇编程序源代码实现则保存在arch/arch/(例如,arch/arm/)目录下. 联编系统也考虑到一般代码可能需要借助于特定于体系结构的机制.所有特定于处理器的头文件都位于include/asm-arch/.在内核配置为特定的体系结构之后,则建立符号链接incl