流类库与输入输出

来源:《C++语言程序设计》

像C语言一样,C++语言也没有输入输出语句。

但C++标准库中有一个面向对象的输入输出软件包,即I/O流类库。

流是I/O流类的中心概念。

------

I/O流类库是C语言中I/O函数在面向对象的程序设计方法中的一个替换产品。

------

在C++中,将数据一个对象另外一个对象流动抽象为"流"。

从流中获取数据的操作称为提取操作

向流中添加数据的操作称为插入操作

数据的输入与输出就是通过I/O流来实现的。

------

当程序与外界环境进行信息交流时,存在着两个对象,一个是程序中的对象,另一个是文件对象。

流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。

------

程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。

-------

由于流对象程序中的对象文件对象进行交互的连接,对程序对象而言,文件对象该有的特性,流对象也有,所以程序将流对象看作是文件对象的化身

-------

操作系统是将键盘,屏幕,打印机和通信端口作为扩充文件来处理的,而这些处理是通过操作系统设备驱动程序来实现的。

因此,从C++程序员的角度看,这些设备磁盘文件是等同的,与这些设备的交互也是通过I/O流类来实现的。

------

在许多操作系统中,输入输出设备如键盘、屏幕、打印机和通信端口等都可以通过文件系统的抽象来访问。

这种抽象使得对这些设备的操作与文件操作非常相似,从而简化了编程模型。

以下是操作系统如何将这些设备视为“文件”来处理的一些具体方式:

键盘:通常被抽象为标准输入设备

在类Unix系统中通常对应于文件/dev/stdin/dev/tty

在Windows系统中,可以通过CONIN$来访问。

屏幕:通常被抽象为标准输出设备

在类Unix系统中通常对应于文件/dev/stdout/dev/tty

在Windows系统中,可以通过CONOUT$来访问。

---------

在Windows系统中,CONIN$ 和 CONOUT$ 是特殊的设备名称

它们分别用于访问控制台输入(通常是键盘)和控制台输出(通常是屏幕)。

  • CONIN$:用于访问控制台输入。在命令行或批处理脚本中,你可以使用 CONIN$ 来从键盘读取输入。

  • CONOUT$:用于访问控制台输出。你可以将输出重定向到 CONOUT$,通常这是默认的控制台输出目的地。

例如,在命令提示符(cmd.exe)中,你可以使用以下命令来将键盘输入重定向到一个文件:

这个命令会将你从键盘输入的内容重定向到 input.txt 文件中,直到你按下 Ctrl+Z(在Windows中,Ctrl+Z 表示文件结束符EOF)。

打印机:在类Unix系统中,打印机通常通过特殊的设备文件来访问如/dev/lp0/dev/usb/lp0

在Windows系统中,打印机通过打印机队列来访问,这些队列可以被看作是特殊的文件。

通信端口

串行端口(如COM1、COM2等)在类Unix系统中通常表示为设备文件,如/dev/ttyS0/dev/ttyUSB0

在Windows系统中,它们通过命名管道(如\\.\COM1)来访问。

---------

流所涉及的范围还远不止于此,凡是数据一个地方传输另一个地方的操作都是流的操作。

网络数据交换进程数据交换等都是流操作

 流操作也可以针对一个字符串进行。

因此,一般意义上的读操作在流数据抽象中被称为(从流中)提取写操作被称为(向流中)插入

---------

I/O流类库的基础是一组类模板,类模板提供了库中的大多数功能,而且可以作用于不同的元素。

流的基本单位除了普通字符(char类型)外,还可以是其他类型(例如wchar_t),流的基本单位的数据类型就是模板的参数。

---------

wchar_t 是 C 和 C++ 编程语言中的一个数据类型,它是 “wide character” 的缩写,用于表示宽字符。宽字符是为了支持国际化和多字节字符集(如 Unicode)而设计的,它能够存储比标准 char 类型更广泛的字符集。

--------

使用I/O流时一般无需直接引用这些模板,因为C++的标准头文件中已经用typedef为这些模板面向char类型的实例定义了别名。

由于模板的实例和类具有相同的性质,可以直接把这些别名看作流类的类名。

--------

为简便起见,把这些别名所表示的模板实例叫类。

在I/O流类库中,头文件iostream声明了4个预定义的流对象,用来完成在标准设备上的输入输出操作:cin,cout,cerr,clog。

---------

I/O流类库中面向char类型的类:

--------

抽象流基类:ios

-------

输入流类:

istream:通用输入流类和其他输入流的基类

ifstream:文件输入流类

istringstream:字符串输入流类

--------

输出流类:

ostream:通用输出流类和其他输出流的基类

ofstream:文件输出流类

ostringstream:字符串输出流类

--------

流缓冲区类:

streambuf:抽象流缓冲区基类

filebuf:磁盘文件的流缓冲区类

stringbuf:字符串的流缓冲区类

-----------------

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

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

相关文章

RK3288 android7.1 适配 ilitek i2c接口TP

一,Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器,如 ILI6480、ILI9341 等,采用 I2C 接口。 这些控制器能够支持多点触控,并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&am…

【AI写作宝-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

一文熟悉新版llama.cpp使用并本地部署LLAMA

0. 简介 最近是快到双十一了再给大家上点干货。去年我们写了一个大模型的系列,经过一年,大模型的发展已经日新月异。这一次我们来看一下使用llama.cpp这个项目,其主要解决的是推理过程中的性能问题。主要有两点优化: llama.cpp …

安全、高效、有序的隧道照明能源管理解决方案

徐悦 (安科瑞电气股份有限公司 上海嘉定201801) 前言 双碳数字化能源管理对高速公路来说是个新鲜事。今年的中央经济工作会议提出:将“做好碳达峰、碳中和工作”作为2021年的任务之一,而我国高速公路里程15.5万公里,…

Navigating Net 算法简介

0. Inro \textbf{0. Inro} 0. Inro 1️⃣一些要用到的符号 ( U , dist ⁡ ) (U, \operatorname{dist}) (U,dist)为基础度量空间, S ⊆ U S \subseteq U S⊆U为包含 n ≥ 2 n \geq 2 n≥2个对象的 Input \text{Input} Input​ h ⌈ log ⁡ 2 diam ⁡ ( S ) ⌉ h\lef…

flutter 语法糖库 flutter_magic 发布 1.0.1

众所周知,flutter 是一款由谷歌开发的跨平台工具,一直在开发者心中久负盛名。 但是语法死亡嵌套是个诟病。 最近有 flutter 开发者 panjing,发布了 flutter 语法精简库,flutter_magic,可以让语法变成类似 swiftui 一…

【日志】392.判断子序列

2024.11.8 【力扣刷题】 392. 判断子序列 - 力扣(LeetCode)https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 整个题从一开始就是打算从双指针的思想往下走的。但是,我设置了四个变量sLeft…

07 Lambda和StreamAPI

目录 1.Lambda表达式 语法格式: 简单示例 2.函数式接口 常见的函数式接口 1. Supplier 2. Consumer 3. Function,> 4. Predicate 总结 3.流式编程——StreamAPI 基本概念 常见的 Stream 操作 1. 创建 Stream 2. 中间操作 3. 终端操作 简单练习 …

TMDOG的Gin学习笔记_02——Gin集成支付宝支付沙箱环境

TMDOG的Gin学习笔记_02——Gin集成支付宝支付沙箱环境 博客地址:TMDOG的博客 作者自述: 最近忙着整理自己的项目代码,终于有时间更新一下博客。这次的内容是关于如何在Gin框架下集成支付宝的支付沙箱环境,具体包括如何初始化支付…

Docker网络概述

1. Docker 网络概述 1.1 网络组件 Docker网络的核心组件包括网络驱动程序、网络、容器以及IP地址管理(IPAM)。这些组件共同工作,为容器提供网络连接和通信能力。 网络驱动程序:Docker支持多种网络驱动程序,每种驱动程…

OpenHarmony4.1蓝牙芯片如何适配?触觉智能RK3568主板SBC3568演示

当打开蓝牙后没有反应时,需要排查蓝牙节点是否对应、固件是否加载成功,本文介绍开源鸿蒙OpenHarmony4.1系统下适配蓝牙的方法,触觉智能SBC3568主板演示 修改对应节点 开发板蓝牙硬件连接为UART1,修改对应的节点,路径为…

QT 如何使QLabel的文字垂直显示

想要实现QLabel文字的垂直显示,可以通过使用“文字分割填充换行符”的方式来实现QLabel文字垂直显示的效果,下面是效果图: 具体实现代码: #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow:…

数据结构选择题及答案

一、选择题 1、下列查找方法中,( )适用于查找有序单链表。 A.分块查找; B.哈希查找; C.顺序查找; D.二分查找; 2、在有n个结点的二叉树的二叉链表表示中,空指针数为( )。 A&#xf…

2024上半年上午30

CPU没有减法器的说法

php实现excel表格数据快速入库

项目场景:大概有一百来份excel表格数据需要整理入库,基础字段一样,如果按照传统的处理方法,需要先整理好数据(数据清洗、合并等),并且按照系统导入模板整理出来,费时费力。 需要解决…

【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者

在工业领域,工业风扇的稳定高效运行对于维持良好的生产环境至关重要。而驱动芯片作为工业风扇控制系统的核心元件,其性能直接影响风扇的工作状态。芯麦 GC5931 作为一款新型驱动芯片,在替代 A5931/Allegro 应用于工业风扇中展现出了非凡的优势…

CST案例分析:TLM算法仿真5G毫米波手机天线和整机

5G时代,产品复杂,更新换代快,如何快速仿真不同的设计版本是影响研发效率的关键问题。本期我们用达索系统SIMULIA自己的手机模型来演示5G毫米波的仿真。 (图片仅为概念演示,未经达索系统授权不得使用) 完整的…

小猿口算炸鱼脚本

目录 写在前面: 一、关于小猿口算: 二、代码逻辑 1.数字识别 2.答题部分 三、代码分享: 补充:软件包下载 写在前面: 最近小猿口算已经被不少大学生攻占,小学生直呼有挂。原本是以为大学生都打着本…

【debug】QT 相关问题error汇总

总结一下碰到过的所有问题error以及解决方案 qt的UI更新之后构建后发现没有变化 取消项目中的Shadow build的勾选,作用是取消影子构建,此后构建目录与源码处于同一目录,每次编译更新程序使用的UI文件error: ‘class QWidget’ has no member…

滑动窗口最大值

239. 滑动窗口最大值 - 力扣(LeetCode) 题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 …