当前位置: 首页 > web >正文

关于linux系统编程2——IO编程

IO

1概念:

  • io指input/output
  • linux系统中一切皆是文件
  • 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的接口:

  • fopen/fclose
  • fgetc/fputc
  • fgets/fputs
  • fscanf/fprintf
  • fread/fwrite
  • fseek/rewind/ftell
  • 操作步骤:
    • 打开文件
    • 读写文件
    • 关闭文件

文件的打开

1fopen:

原型:FILE *fopen(const char *pathname, const char *mode);

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

参数:

  • pathname:要打开的的文件路径字符串
  • mode:打开的方式
    • r  只读  文件存在只读打开,文件不存在报错
    • r+  读写  文件存在读写打开,文件不存在报错
    • w  只写  文件存在清0,文件不存在创建,只写打开
    • w+  写读  文件存在清0,文件不存在创建,写读打开
    • a  追加  文件存在追加,文件不存在创建,只写打开
    • a+  追加读写  文件存在追加,文件不存在创建,写读打开

返回值:

        成功返回FILE*指针

        失败返回NULL

        

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

注意:

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

6. fgets

原型:char *fgets(char *s, int size, FILE *stream);
功能:从流中最多读size-1个字节数据放入s指向的空间中,遇到\n读取截止
参数:s:存放数据空间的首地址size:最多存放元素的个数stream:文件流指针
返回值:成功返回存放数据空间的首地址失败返回NULL读到文件末尾返回NULL

注意:

  • 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

 已经打开的三个特殊的流:

  •  stdin:标准输入流
  • stdout:标准输出流
  • stderr:标准出错流

  • scanf、gets、getchar都是通过stdin流实现获得终端信息
  • printf、puts、putchar都是通过stdout流实现在终端信息打印
  • perror通过stderr流实现在终端打印出错信息

4.标准IO的缓存

1. 标准IO缓存:

  • 标准IO是一种有缓存的IO
  • 效率高
  • 实时性差

2. 缓存的类型:

1. 全缓存(4k):

  • 缓存区满刷新缓存
  • 刷新条件:
    • 缓存区满4k刷新
    • fflush函数强制刷新
    • fclose或者程序关闭刷新
  • 与文件建立的缓存一般为全缓存

2. 行缓存(1k):

  • 遇到\n刷新缓存区
  • 刷新条件:
    • 缓存区满1k刷新
    • 遇到\n刷新
    • fflush函数强制刷新
    • fclose或者程序关闭刷新
  • 与终端建立的缓存一般为行缓存(stdin、stdout均为行缓存)

3. 不缓存(0k):

  • 立即刷新不缓存
  • 刷新条件:
    • 不缓存立即刷新
  • 出错处理或者人机交互一般使用不缓存(stderr不缓存)

tip:

man手册

1:章节

  • 标准命令
  • 系统调用
  • 库函数
  • 设备说明
  • 文件格式
  • 娱乐
  • 杂项
  • 管理员命令

2. 使用示例

 man 章节号 搜索内容

exe:

http://www.xdnf.cn/news/17689.html

相关文章:

  • 【Docker实战进阶】Docker 实战命令大全
  • AI基础与实践专题:PyTorch实现线性回归
  • 【unity实战】在Unity中实现不规则模型的网格建造系统(附项目源码)
  • 【实用案例】录音分片上传的核心逻辑和实现案例【文章附有代码】
  • Godot ------ 平滑拖动03
  • SpringBoot 自动配置核心机制(面试高频考点)
  • Orange的运维学习日记--38.MariaDB详解与服务部署
  • JavaEE 初阶第十七期:文件 IO 的 “管道艺术”(下)
  • 《范仲淹传》读书笔记与摘要
  • 使用frp内网穿透实现远程办公
  • 基于AI量化模型的比特币周期重构:传统四年规律是否被算法因子打破?
  • Python(9)-- 异常模块与包
  • AI Coding 概述及学习路线图
  • Elasticsearch Node.js 客户端的安装
  • 【功能测试】软件集成测试思路策略与经验总结
  • FFmpeg - 基本 API大全(视频编解码相关的)
  • 【数据结构】深入理解顺序表与通讯录项目的实现
  • leetcode-hot-100 (图论)
  • CobaltStrike的搭建和使用
  • 爬虫与数据分析实战
  • 【09-神经网络介绍2】
  • 一文读懂 C# 中的 Lazy<T>
  • 第10节 大模型分布式推理典型场景实战与架构设计
  • Godot ------ 平滑拖动02
  • Apache Ignite 核心组件:GridClosureProcessor解析
  • C# 异步编程(计时器)
  • Python: configparser库 ini文件操作库
  • 使用MAS(Microsoft Activation Scripts)永久获得win10专业版和office全套
  • Edit Distance
  • react中父子数据流动和事件互相调用(和vue做比较)