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

标准IO的特点和函数接口的分类

目录

标准IO的调用逻辑

缓存机制

标准IO的特点 *

定义

流的分类

流指针FILE *

标准IO是C库中定义的一组用于输入输出的函数接口。不同的操作系统只要移植了C库就可以使用,它是在系统调用之前做了一个二次封装,相当于是间接的进行了系统调用。可移植性强,可以在不同的系统环境下进行使用。

标准IO的调用逻辑

标准IO读/写操作
if(是linux操作系统)
{
    调用linux的系统函数(文件io)
}
if(是Windows操作系统)
{
    调用Windows的系统函数(文件io)
}
if(是ios操作系统)
{
    调ios用的系统函数(文件io)
}

  1. 标准IO

缓存机制

标准IO在系统调用之前作了二次封装增加了缓存机制,减少了系统调用的次数,提高了程序的效率。

缓存机制

正常调用——》应用层读写文件——》调用内核层的函数接口—》内核层和硬件层进行交互-》拿到数据返回给应用层。

带有缓存机制-》应用层读写文件-》调用内核层的函数接口-》内核层和硬件层进行交互-》拿到数据返回给缓存区-》每次调用从缓存区当中拿数据。

标准IO的特点 *

  1. 标准IO是C库中提供的一组专门用于输入输出的函数接口
  2. 标准IO不仅在Unix系统上,在很多操作系统上都实现了标准IO。
  3. 标准I/O通过缓冲机制减少系统调用,提高效率
  4. 标准I/O库的所有操作都是围绕流(stream)来进行的,在标准I/O中,流用FILE *来描述。
  5. 标准IO默认打开三个流:标准输入(stdin),标准输出(stdout),标准出错(stderr)。

定义

所有的I/O操作仅是简单的从程序移进或者移出,这种字节流,就称为流。

流的分类

文本流/二进制流

流指针FILE *

FILE* 是一个指向 FILE 结构体的指针,这个结构体由标准库定义,用于表示一个打开的文件或输入/输出流。

查看命令

输入1,点击回车

放到FILE上,按住CTRL + ] CTRL + [

缓存区的结束地址和起始地址

  1. 缓存区的分类 *

  1. 全缓存—》基于文件

刷新缓存的条件:1 程序正常退出(遇到return(main))

2 exit 刷新缓存区

3 关闭文件流

4 fflush:强制刷新缓存区

5缓存区满

  1. 行缓存-》基于终端stdin/stdout

刷新缓存的条件:1 程序正常退出(遇到return(main))

2 exit 刷新缓存区

3 关闭文件流

4 fflush:强制刷新缓存区

5缓存区满

6 \n刷新缓存区

  1. 不缓存:stderr

注意:缓存区只有在用的时候才会开辟。

示例代码:

  1. 程序正常结束刷新缓存区

  1. 缓存区满

  1. \n刷新

  1. fflush刷新 man fflush

#include <stdio.h>
int fflush(FILE *stream);
功能:强制刷新缓存区
fflush(NULL//强制刷新所有缓存区。
参数:文件流
返回值:成功:0
        失败:EOF-1)更新errno

示例代码:

  1. 标准IO的函数接口

1. 打开文件,关闭文件(fopen,fclose)
2./写一个字符(fgetc   fputc)
3./写一个字符串(fgets   fputs)
4./写一个二进制文件(fread fwrite)
5. 移动指针(fseek)


http://www.kler.cn/a/349620.html

相关文章:

  • 线段树(Segment Tree)和树状数组
  • 04树 + 堆 + 优先队列 + 图(D1_树(D1_基本介绍))
  • AI常见的算法和例子
  • 01.04、回文排序
  • 单细胞-第五节 多样本数据分析,打分R包AUCell
  • Kafka常见问题之 org.apache.kafka.common.errors.RecordTooLargeException
  • LabVIEW如何实现高精度定时器
  • 【Vue】Vue2(10)
  • Flink移除器Evictor
  • 哈希表的模拟实现——Java数据结构
  • 字符串和字符数组
  • 文心一言 VS 讯飞星火 VS chatgpt (370)-- 算法导论24.4 2题
  • SQL注入漏洞(三)
  • Node.js配置Typescript自动编译
  • 深入探讨:xlive.dll文件缺失的影响与解决方案,两分钟修复xlive.dll错误
  • CentOS安装NVIDIA驱动、CUDA以及nvidia-container-toolkit
  • 前端小技巧-网页点击动画效果
  • CSS——表格、表单、链接和导航菜单
  • Python Django 数据库优化与性能调优
  • 线性代数杂谈(2)——逆,转置与置换矩阵
  • 机器学习:opencv--人脸检测以及微笑检测
  • 【vue】vue-router_ vue3路由管理器
  • 5个 elasticsearch实战应用案例和详细分析
  • SuperMap GIS基础产品FAQ集锦(20241014)
  • Python机器学习数据清洗到特征工程策略
  • go语言中的函数详解