文件IO和标准IO的区别

简介: 文件IO和标准IO的区别

标准IO(高级磁盘IO)


应用层C语言库函数提供了一些用来做文件读写的函数列表,叫标准IO。
标准IO有一系列的C库函数构成(fopen,fclose,fwrite,fread),这些标准IO函数其实是由文件IO封装而来的(fopen内部还是调用了open);
我们通过fwrite写入的内容不是直接进入内核中的buf,而是先进入应用层标准IO库自己维护的buf中,然后标准IO库自己根据操作系统单次write的最佳count来选择好的时机来完成write到内核中的buf中。
因此,标准I/O封装了底层系统调用更多的调用函数接口。

  • 特点
  1. 是由ANSI C 联合 ISO标准定义的,属于c库调用(glibc,libc)
  2. 通过man 3查看
  3. 通过缓冲机制减少系统调用的次数,可以高执行效率
  4. 跨平台
  5. 通过文件指针(FILE * 结构体)操作文件
  • 缓存机制
  • 全缓存 4k(默认大小)
    刷新条件:
    1.满了
    2.程序正常结束(ctrl c 不算)
    3.fflush 冲刷
  • 行缓存 1k
    刷新条件:
    1.‘\n’’
    2.满了
    3.程序正常结束(ctrl c 不算)
    4.fflush 冲刷
  • 无缓存 0k

文件IO(低级磁盘IO)


文件I/O是操作系统封装了一系列open、close、write、read等API函数构成的一套用来读、写文件的接口供应用程序使用,通过这些接口可以实现对文件的读写操作,但是效率并不是最高的。
文件I/O是采用系统直接调用的方式,因此当使用这些接口对文件进行操作时,就会立刻触发系统调用过程,即向系统内核发出请求之后,系统内核会收到执行相关代码处理的请求,决定是否将操作硬件资源或返回结果给应用程序。

  • 特点
  • 使用文件描述符(fd文件描述符) 0~1023的整数值(非负整数)操作文件
  • 是由POSI X定义(POSIX–》可移植的操作系统接口)
  • 非缓冲机制

文件I/O和标准I/O的本质区别


1. 缓冲区:标准I/O函数接口在对文件进行操作时,首先操作缓存区,等待缓存区满足一定的条件时,然后再去执行系统调用,真正实现对文件的操作。 而文件I/O不操作任何缓存区,直接执行系统调用。
2. 系统开销:使用标准I/O可以减少系统调用的次数,提高系统效率。例如,将数据写入文件中,每次写入一个字符。采用文件I/O的函数接口,每调用一次函数写入字符就会产生一次系统调用。而执行系统调用时,Linux必须从用户态切换到内核态,处理相应的请求,然后再返回到用户态,如果频繁地执行系统调用会增加系统的开销。
3. 执行效率:采用标准I/O的函数接口,每调用一次函数写入字符,并不着急将字符写入文件,而是放到缓存区保存,之后每一次写入字符都放到缓存区保存。直到缓存区满足刷新的条件(如写满)时,再一并将缓存区中的数据写入文件,执行一次系统调用完成此过程,这样便很大程度地减少了系统的调用次数,提高了执行效率。

目录
相关文章
|
21天前
|
存储 缓存 安全
Java 中 IO 流、File文件
Java 中 IO 流、File文件
|
2月前
|
存储 Linux API
Linux应用开发基础知识——文件IO操作(三)
Linux应用开发基础知识——文件IO操作(三)
56 2
Linux应用开发基础知识——文件IO操作(三)
|
5天前
|
Java Unix Windows
|
18天前
|
存储 固态存储 Java
文件IO讲解
文件IO讲解
33 0
|
2月前
|
API
使用commons-io-2.0 API来实现监听文件变化
使用commons-io-2.0 API来实现监听文件变化
|
2月前
|
运维 安全 Linux
Linux系统调优详解(十一)——IO调优之文件打开数目限制
Linux系统调优详解(十一)——IO调优之文件打开数目限制
36 5
|
1月前
|
存储 Java 数据处理
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
3月前
|
存储 Java 数据安全/隐私保护
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
|
3月前
|
存储 移动开发 Java
从零开始学习 Java:简单易懂的入门指南之IO字节流(三十)
从零开始学习 Java:简单易懂的入门指南之IO字节流(三十)