Linux系统下文件操作API和C库函数下文件操作API的区别

以open函数举例

调用方式

open函数是Linux内核调用的api,返回值是文件描述符

fopen函数是C语言标准库里面的函数,返回值是文件指针,在不同的操作系统下,调用不同的内核api

移植性

open函数的Linux内核调用的api,只有在linux操作系统下才能调用,移植性有限

fopen函数是基于C语言标准库的,只要包含了stdio.h头文件,就可以调用,移植性良好

适用范围

由于Linux系统下所有设备包括软件都是以文件形式操作,所以可以通过open函数来调用文件,或者硬件

fopen只能操作普通正规文件类型的文件

运行层次

open函数属于低级io,离系统内核较近,用户在用户态调用open函数,运行open函数时需要向Linux内核发送指令,操作系统的状态会从用户态转向核心态,由Linux内核执行open函数

fopen函数属于高级io,离系统内核较远,用户在用户态调用fopen函数,运行时大部分内容都在自己的缓冲区操作,对内核的依赖性较小

缓冲

open函数运行在非缓冲文件系统,非缓冲文件系统较为依赖操作系统内核,让系统内核来对文件进行操作,是系统级的输入输出,因而不需要返回文件类型的指针,也不需要开辟缓冲区,只能读写二进制文件,但是速度快,效率高

fopen函数运行在缓冲文件系统,缓冲文件系统会在操作文件时,在内存开辟一块缓冲区内存,为操作的文件使用。读文件时,从磁盘读到的文件先读入缓冲区,缓冲区读满了之后,再依次将缓冲区的内容读给目的地址;写文件时,现将源地址的文件写到缓冲区,缓冲区写满了之后,再依次将缓冲区的内容写入到磁盘文件。缓冲区越大,操作外存的次数越少,减少内外存切换的时间,执行速度就越快

open函数每次读写都需要在用户态和核心态之间切换,多次读写,切换次数较多;fopen函数由于在用户态就有了缓冲区,多次读写会等缓冲区读写满了,再转换到核心态,所以用户态和核心态之间的切换较少。顺序访问时,fopen函数的效率较快,而随机访问时,open函数的效率较快

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做台无人机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值