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

发布于:2024-10-15 ⋅ 阅读:(32) ⋅ 点赞:(0)

标准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)