前言
少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向
一、来源的不同
从来源的角度很好区分俩种的差别
-
open是UNIX系统调用函数(Linux等),返回的是文件描述符,在文件中起到索引的作用。
- 标准io 是由标准c库提供的 通用的 只针对普通的文件
- 文件io linu系统特有的使用的是GLIBC库 针对linu所有文件
-
fopen是ANSIC标准的C语言库函数,在不同系统中应该调用不同的内核api.返回的是一个指向文件结构的指针
二、移植性
fopen是C标准库函数,因此拥有良好的移植性;而open是UNIX系统调用,移植性有限。如在window下相似的功能使用API函数CreateFile。
三、适用范围
- open返回文件描述符,而文件描述符是UNIX系统下的一个重要概念,UNIX下的一切设备都是以文件的形式进行操作,包括之后进程间通信所用的管道也是以文件形式打开,以及普通的文件。更接近内核
- fopen是用来操作普通文件,位于用户层更高级
四 缓冲
1.缓冲文件系统
使用“fopen fclose fread fputs”等函数的时候会在内存开辟一个缓冲区
,先将磁盘文件读取到缓冲区中,装满之后内存在缓冲区进行数据的读取,写文件时也是类似要经过缓冲区执行;因此执行速度就和缓冲区大小相关,缓冲区大操作外存次数就少,速度就快、效率就高。一般来说文件缓冲区的大小有机器决定
2.非缓冲的文件系统
非缓冲的文件系统依赖于操作系统,通过系统的功能对文件进行读写,只能写二进制文件,因此效率高,速度快。