来源
-
open是UNIX系统调用函数(包括LINUX),返回的是文件描述符
-
fopen是ANSIC标准中的C语言库函数,在不同的系统中调用不同的API,C语言的库函数是需要调用系统API实现功能,返回的是一个指向文件结构的指针
移植性
fopen是标准C语言库的函数,所以拥有良好的移植性;而open是UNIX系统调用,移植性有限,Windows下相似功能函数:CreateFile
适用范围
- open返回文件描述符,文件描述符是UNIX系统下的重要概念,UNIX下的一切设备都是以文件描述符来展开文件操作的
在一些特定的场合一定需要用open来打开
1、linux进程中的通信用到的管道文件就必须要用open来打开
2、在做硬件设备的驱动时,因为驱动是基于内核来写的代码,所以当基于linux内核来写的代码,就必须用open
- fopen是用来操纵普通文件的
文件IO层次
open属于低级IO函数,fopen属于高级IO函数
低高级的区别:谁离系统内核更近
低级文件IO运行在内核态,高级文件IO运行在用户态
缓冲区
-
fopen,fclose,fread,fwrite,fgetc,fgets,fputc,freopen,fseek,ftell,rewind等,都是在一个内存缓冲区里做操控,最后一次性写入到文件,文件缓冲区的大小决定了操控外存的次数,大的话操控外存的次数就少,执行速度就快,效率就高
-
open,close,read,write,getc,getchar,putc,putchar等,都是通过内核来操纵文件,因此在操纵文件的时候会从用户态切换到内核态,那么多次调用,多次切换,就会导致效率很低。
——————————————————
注意
当然对于速度,效率来说,现在对于动不动几个G的内存,多核CPU来说,中间的速度效率差别可以忽略不计
笔记内容有借鉴这里。1