read和fread有什么区别

        fread返回的是一个FILE结构指针,而read返回的是一个int的文件号。

        read是UNIX系统中的系统调用,是类UNIX系统,提供给程序员操作文件的接口。

        fread是C语言提供的读取文件的函数库。实际上底层也是靠调用的read来实现。

        包括open,read, write, seek,close,和fopen,fread,fwrite,fseek,fclose。他们分别表示无缓冲读写和有缓冲读写。read发生在内核空间,而fread发生在用户空间。read其实也有缓存,但空间不大。一般来说使用fread比使用read的效率更高。

 如果文件的大小是8k。你如果用read/write,且只分配了2k的缓存,则要将此文件读出需要做4次系统调用来实际从磁盘上读出。
 如果你用fread/fwrite,则系统自动分配缓存,则读出此文件只要一次系统调用从磁盘上读出。

        但在接近底层时,使用read函数更合适一些,这样避免了数据进入用户空间,内核直接实现,效率更高。

        系统调用和库函数的区别:

a.调用形式不同:

        1.函数一般使用调用指令,其转向地址是固定不变的,包含在跳转语句中;

        2.系统调用中不包含程序入口。而仅仅提供功能号,按功能号调用。

b.被调用代码的位置不同:

        1.函数调用是一种静态调用,调用者和被调用代码在同一程序内,经过链接编译后作为目标代码的一部分。当函数升级或者修改时,必须重新编译链接。

        2.系统调用是一种动态调用,系统调用的处理代码在调用程序之外,这样一来,系统调用处理代码升级或者修改时,与调用程序无关。而且,调用程序的长度也大大缩短,减少了调用程序占用的存储空间。

c.提供方式不同:

        1.函数往往由编译系统提供,不同编译系统提供的函数可以不同;

        2.系统调用由操作系统提供,一旦操作系统设计好,系统调用的功能、种类与数量便固定不变了。

d.调用实现不同:

        1.程序使用一般机器语言来调用函数,是在用户态运行的。

        2.程序执行系统调用,是通过中断机构来实现的,需要从用户态转变为内核态。在管理状态执行,因此安全性好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值