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

Linux软件编程--IO

1、概念

  • I / O指 input / output
  • IO操作的对象是文件,在 Linux 系统中一切都是文件

2、文件

        文件是一段数据的集合,通常存放在外存中,掉电不会丢失去

        文件的分类
  • 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.缓存与标准IO
        标准IO
  • 用来操作普通文件的IO
  • 是一种有缓存的IO,具有效率高、时效性差的特点
        缓存的类型
  • 缓存:当缓存区满时,将缓存区数据送入内核进行处理
  • 全缓存
    • 刷新条件
      • 缓存区满刷新(缓存区满内存为 4kb )
      • 调用函数刷新,如 fflush 强制刷新、fclose 或者关闭程序刷新
    • 与文件建立的缓存一般是全缓存
  • 行缓存
    • 刷新条件
      • 缓存区满刷新(行缓存区满内存为 1kb )
      • 调用函数刷新,如 fflush 强制刷新、fclose 或者关闭程序刷新
    • 与终端建立的缓存一般为行缓存
  • 不缓存
    • 立即刷新
    • 出错处理与人机交互一般不缓存
2、普通文件的类型
  • ASCLL码文件:文件中的内容均为能在屏幕上显示的ASCLL字符
    • 程序、文本文件均为ASCLL码文件
  • 二进制文件:文件中的所有内容均为数据对应的二进制形式存放(包含一些不能在界面上显示的内 容)
    • ASCII码文件也是二进制文件
    • 图片、音视频、压缩包均为二进制文件
3、标准IO的接口

  1.fopen 

原型: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

  4.fgetc

原型:int fgetc(FILE *stream);

功能: 读取流中的下一个字符

参数: stream:文件流指针

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

  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

  7.fprintf

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

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

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

参数 返回值: 成功返回打印字符的个数 失败返回负数

  8.fscanf

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

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

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

返回值: 成功返回匹配的输入控制符的个数 失败返回EOF 读到文件末尾返回EOF

http://www.dtcms.com/a/326487.html

相关文章:

  • Linux 软件编程:IO——标准IO
  • 《录井管理与工程》书籍第一章要点及相应思考
  • 工业数采引擎-通信协议(Modbus/DTU/自定义协议)
  • FFmepg源码系列-avformat_open_input()
  • python之uv使用
  • [动态规划]最长公共子序列(LCS)
  • Nacos添加权限
  • uart通信中出现乱码,可能的原因是什么 ?
  • Linux软件编程:标准IO(ASCII文件)
  • Discuz论坛和java应用的架构部署
  • 视频剪辑的工作流程
  • 笔试——Day35
  • 用 Flink SQL 和 Paimon 打造实时数仓:深度解析与实践指南
  • GitHub的简单使用方法----(1)
  • 论文阅读 arxiv 2024 MemGPT: Towards LLMs as Operating Systems
  • 平衡二叉树(AVL)解析与实现
  • python每日一题 1的数量 非常简单
  • 松灵机器人 scout ros2 galactic 驱动 安装,并且跑巡线算法
  • 深入剖析 C++ STL 中的 std::list 容器
  • 一篇文章解决Unity没有添加模块选项的问题
  • Linux系统编程 | 线程池
  • Redis7 GEO功能介绍与电商场景案例解析
  • Static CXL Switch:静态CXL交换机相关内容
  • leecode875 爱吃香蕉的珂珂
  • 【Unity】打包学习笔记
  • pip 和 conda,到底用哪个安装?
  • 【已解决】【obsidian插件开发】svg图标路径不正确
  • 第16届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2025年1月12日真题
  • 机器翻译:一文掌握序列到序列(Seq2Seq)模型(包括手写Seq2Seq模型)
  • 豆包 + 蘑兔 AI:音乐创作的梦幻组合