四、IO

1. 概念

1.  IO 指 input / output

2.  Linux系统中一切皆是文件

3.  IO操作的对象是文件

2. 文件

1. 概念

一段数据的集合

2. 特点

文件通常存放在外存中,掉点后数据不会丢

3. 分类

  • b(block,块设备文件)

 -- 按块扫描信息的文件,通常用于存储设备

 -- 数据读写以固定大小块为单位,支持随机访问

 -- 文件IO

  • c(character,字符设备文件)

 -- 按字符扫描信息的文件,通常用于串行设备

 -- 数据是流式的,通常不支持随机访问

 -- 文件IO

  • d(directory,目录文件)

 -- 表示一个目录,用于存放其他文件和子目录的文件夹

 -- 目录IO/文件IO

  • -(普通文件)

 -- 常见的文件类型,存放一般信息的文件

 -- 标准IO/文件IO

  • l(link,链接文件)

 -- 操作文件等价于操作文件指向的文件

 -- 链接IO/文件IO

  • s(socket,套接字文件)

 -- 用来进程间通信,用于网络通信或本地进程通信

 -- 文件IO

  • p(pipe,管道文件)

 -- 用来进程间通信,一种单向数据通道,用于命令间的数据传递

 -- 文件IO

3. 标准IO

1. 概念

用来操作普通文件

2. 文件类型

1. ASCII码文件

文件中的所有内容均为能够在屏幕上显示的ASCII码字符

程序、文本文件均为ASCII码文件

2. 二进制文件

文件中的所有内容均为数据对应的二进制形式存放,包含一些不能在界面上显示的内容

ASCII码文件也是二进制文件

图片、音视频、压缩包均为二进制文件

3. 标准IO的接口

1. fopen / fclose

2. fgetc / fputc

3. fgets / fputs

4. fscanf / fprintf

5. fread / fwrite

6. fseek / rewind/ftell

4. 流

stdin:标准输入流

stdout:标准输出流

stderr:标准出错流

printf、puts、putchar        通过stdout流实现在终端信息打印

scanf、gets、getchar       通过stdin流实现获得终端信息

perror                                通过stderr流实现在终端打印出错信息

5. 文件的打开

1. fopen
  • 原型:FILE *fopen(const char *pathname, const char *mode);
  • 功能:

        打开pathname指向字符串对应的文件,并且和它建立一个流

  • 参数:

        pathname:要打开的文件路径字符串,mode:打开的方式

  • 返回值:

    成功返回FILE*指针, 失败返回NULL

        r       只读             文件存在只读打开,文件不存在报错
r+     读写             文件存在读写打开,文件不存在报错
w      只写             文件存在清零,文件不存在创建,只写打开
w+    写读            文件存在清零,文件不存在创建,写读打开
a       追加            文件存在追加,文件不存在创建,只写打开
a+    追加读写      文件存在追加,文件不存在创建,写读打开

2. fclose
  • 原型:int fclose(FILE *stream);
  • 功能:

        关闭已经打开的流

  • 参数:

        stream:文件流指针

  • 返回值:

        成功返回0,失败返回EOF(-1)

3. fputc
  • 原型:int fputc(int c, FILE *stream);
  • 功能:

        将字符c写入流中

  • 参数:

        c:要写入的字符,stream:文件流指针

  • 返回值:

        成功返回输出的ASCII码值, 失败返回EOF

putchar() 等价于 fputc(ch, stdout)

4. fgetc
  • 原型:int fgetc(FILE *stream);
  • 功能:

        读取流中的下一个字符

  • 参数:

        stream:文件流指针

  • 返回值:

        成功返回读到字符的ASCII码值,失败或者读到文件末尾返回EOF

ch = getchar() 等价于 ch = fgetc(stdin)

        

5. fputs
  • 原型:int fputs(const char *s, FILE *stream);
  • 功能:

        向流中写入s指向的字符串

  • 参数:

        s:要写入的字符串的首地址,stream:文件流指针

  • 返回值:

        成功返回非负数,失败返回EOF

6. fgets
  • 原型:char *fgets(char *s, int size, FILE *stream);
  • 功能:

        从流中最多读size-1个字节数据放入s指向的空间中,遇到\n读取截止

  • 参数:

        s:存放数据空间的首地址,size:最多存放元素的个数,stream:文件流指针

  • 返回值:

        成功返回存放数据空间的首地址

        失败返回NULL,读到文件末尾返回NULL

fputs不会多打印\n字符,puts会多打印一个\n字符

gets会去掉从终端接收的\n字符,fgets不会去掉从终端接收的\n字符

7. fprintf
  • 原型:int fprintf(FILE *stream, const char *format, ...);
  • 功能:

        将格式化的字符串打印在流中

  • 参数:

        stream:文件流指针, format:格式化的字符串,   ...:参数

  • 返回值:

        成功返回打印字符的个数

        失败返回负数

8. fscanf
  • 原型:int fscanf(FILE *stream, const char *format, ...);
  • 功能:

        从流中接收格式化的字符串

  • 参数:

        stream:文件流指针, format:格式化字符串        ...:参数

  • 返回值:

        成功返回匹配的输入控制符的个数

        失败返回EOF,读到文件末尾返回EOF

4. 标准IO的缓存

1. 类型

1. 全缓存(4k)

1.缓存区满刷新缓存

2.刷新条件:

        缓存区满4k刷新

        fflush函数强制刷新

        fclose或者程序关闭刷新

3.与文件建立的缓存一般为全缓存

2. 行缓存(1k)

1. 遇到\n刷新缓存区

2. 刷新条件:

        缓存区满1k刷新

        遇到\n刷新

        fflush函数强制刷

        fclose或者程序关闭刷新

3. 与终端建立的缓存一般为行缓存(stdin、stdout均为行缓存)

3. 不缓存(0k)

1. 立即刷新不缓存

2. 刷新条件:

        不缓存立即刷新

3. 出错处理或者人机交互一般使用不缓存(stderr不缓存)

2. 标准IO的缓存

1. 特点

        标准IO是一种有缓存的IO

        效率高

        实时性差

2. 标准IO 与 文件IO

标准IO:用户代码 → 库函数 → 缓存 → 内核

  • 路径更长,但效率高。

  • 缓存由标准库管理

文件IO:用户代码 → 内核

  • 直接通过open(),read(),write()等系统调用操作,无中间缓冲区。

  • 实时性强,但频繁调用效率低

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark02 - SparkContext介绍

一、应用入口:SparkContextSpark Application 程序入口为:SparkContext,任何一个应用首先需要构建 SparkContext 对象,如下两步构建:第一步、创建 SparkConf 对象设置 Spark Application 基本信息,比如应用…

Selenium动态元素定位

动态元素定位方法一:使用CSS选择器通过部分匹配操作符定位动态属性中的固定部分。*(包含),^(开头),$(结尾)。/* 匹配id前缀为user_的元素 */ cssdiv[id^"user_"…

OBOO鸥柏丨115寸商用屏/工业液晶显示器招标投标核心标底参数要求

整机参数要求:商用液晶显示器/工业LCD一体机/商业智能终端机/工业防爆显示器/招标投标核心标底参数要求1、整机屏幕采用≥采用115英寸超高清原厂原包原装工业LCD液晶屏面板;具有高色域,显示动态视频、web及3D动画时,保障运动画面流…

麻溜启动Oracle实例demo

注意:镜像非常大并且外网网络过慢,可能得pull一天(n次超时)。。md后台静默pull命令: nohup docker pull container-registry.oracle.com/database/express:latest > pull.log 2>&1 & 启动实例&#xff1…

应用监控工具Skywalking

目录 Skywalking介绍 Skywalking架构 Skywalking安装 Skywalking使用 Skywalking配置 Skywalking数据持久化 Skywalking告警 Skywalking介绍 Apache Skywalking是一个开源的应用性能监控(Application Performance Monitoring,APM)工具…

TCP服务建立的全流程详解

TCP的服务监听步骤(等待客户端连接前)TCP 服务器通过以下步骤完成从初始化到等待客户端连接,为后续的数据传输(send()/recv())奠定了基础一、创建套接字(Socket)作用:套接字是网络通…

数据结构 双链表与LinkedList

本节目标: 认识并且能够实现一个双链表认识LinkedList类并且知道如何去使用 1.双链表 概念 在数据结构中,双链表(Doubly Linked List) 是一种常见的线性数据结构,它由一系列节点组成,每个节点不仅包含数据…

如何解决 JetBrains IntelliJ IDEA 2024.2 和 2025.2 新版本区域选择问题:key is invalid

如何解决 JetBrains IntelliJ IDEA 2024.2 和 2025.2 新版本区域选择问题:key is invalid 在 JetBrains 发布的 IntelliJ IDEA、PyCharm 2024.2 和 2025.2 新版本中,增加了一个新的功能——区域选择。在设置菜单中,你可以找到这一选项&#…

GSON 框架下百度天气 JSON 数据转 JavaBean 的实战攻略

目录 前言 一、百度天气JSON 1、请求参数 2、返回参数 3、属性映射 二、GSON属性映射实战 1、类对象映射 2、属性字段映射 3、日期数据映射 三、天气接口对象展示 1、接口调用 2、Java属性打印输出 四、总结 前言 在当今数字化时代,数据的高效处理与转换…

NAS技术在县级融媒体中心的架构设计与安全运维浅析

NAS技术在县级融媒体中心的架构设计与安全运维浅析 ——原理剖析、应用实践与防御体系建设作者:高级网络安全工程师 吉林•镇赉融媒 刘晓伟 最后更新:2025年8月 适用对象:媒体行业网络安全从业者一、NAS技术核心原理剖析 1. 基础架构 NAS&am…

CobaltStrike的搭建和使用

下载CobaltStrike环境建议使用jdk17,其他java版本有些功能可能无法使用通过网盘分享的文件:CS4.7key-mht.zip 链接: https://pan.baidu.com/s/1CRd1x4r6EIk14BD3UCLgxw?pwdevf4 提取码: evf4将下载的文件分别放在服务器和 本地/kali 上 也就是服务器为…

【Altium designer】一键给多个器件添加参数

目的: 一键给N个元器件/Part添加参数和修改参数值,比如一键给多个电阻添加“备注”并赋予备注的内容为“不焊接”,或者更改“备注”的内容为“不焊接”或空。 背景: 刚入门用AD画原理图,因为原理图的电阻、电容和芯片等等的冗余/兼容设计太多,增加备注不焊的元器件位号…

熟练掌握switch语句:技巧与运用

目录 一、switch语句基础 基本语法结构: 在C/C中: 注意事项: 二、if与switch语句对比 示例:计算整数除以3的余数 使用if语句实现: 使用switch语句实现: 三、break语句的作用 示例(无br…

【03】厦门立林科技——立林科技 嵌入式 校招笔试,题目记录及解析

厦门立林科技——立林科技 嵌入式 校招笔试,题目记录及解析 1.下面的程序的输出是()。2.在头文件中#ifndef/#define/#endif的作用是4.执行下面程序中的输出语句后,输出的结果是()6.在32位处理器上,运行如下程序后p的值为()。10.设有两字符串“…

C++算法(数据结构)版

C算法(数据结构)版 有些题目不是完整的题目,如需查看完整的题目请移步到acwing的算法基础课中 文章目录C算法(数据结构)版单链表思路:双链表思路:栈思路:队列思路:单调栈…

算法训练营DAY57 第十一章:图论part07

prim算法精讲 53. 寻宝(第七期模拟笔试) 题目描述: 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,…

最短路问题从入门到负权最短路

一,BFS层次最短路/*题目描述 题目描述 给出一个 N 个顶点 M 条边的无向无权图,顶点编号为 1∼N。 问从顶点 1 开始,到其他每个点的最短路有几条。 输入格式 第一行包含 2 个正整数 N,M,为图的顶点数与边数。 接下来 M 行&#xff…

AI智能体小白入门指南

AI智能体小白入门指南 ——什么是AI智能体?它们如何工作? 一、AI智能体是什么? AI智能体(AI Agent)是能感知环境、自主决策并执行动作的人工智能系统。 类比理解:像一个“虚拟机器人”或“数字助手”&#…

《设计模式》策略模式

1.策略模式定义 策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一组算法,将每个算法封装起来,并使它们可以相互替换,从而让算法的变化独立于使用它的客户(Client)。 换…

AWS DMS 深度解析:从迁移任务到复制任务 - 全流程指南与最佳实践

AWS Database Migration Service (DMS) 是一项强大的云服务,用于在源数据库和目标数据库之间安全地迁移数据。其核心优势在于支持几乎零停机时间的迁移,这主要归功于其“变更数据捕获 (CDC)”功能。理解迁移任务 (Migration Task) 和复制任务 (Replication Task) 的关系与操作…