open和fopen的区别

来源

  • 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


  1. 借鉴链接地址 ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值