linux系统编程--系统调用和库函数比较

本文探讨了库函数fputc/fgetc与系统调用read/write在文件读写速度上的差异。虽然write函数涉及多次系统调用,但fputc/fgetc利用库函数缓存提高了效率,因此在多数情况下fputc/fgetc的速度更快。由于它们内部的缓冲机制,fgetc/fputc在写满缓存后才调用read/write,减少了系统调用的频率,从而提升了性能。
摘要由CSDN通过智能技术生成
  1. read/write函数与fgetc/fputc函数谁的速度快?
    在这里插入图片描述
    如图所示,库函数fputc/fgetc无法直接进入到内核空间,需要通过调用read/write函数,实现对文件的读写操作,从这一角度考虑似乎read/write的速度会更加快速,真的是这样么?
    答案是否定的,实际上库函数fputc/fgetc的速度将远快于系统调用函数。
    在这里插入图片描述

如上图所示,write函数需要不断重复的执行系统调用进入到内核写入内核缓存,当内核系统缓存写满(4kb)后再写入磁盘;
而库函数内部就有一个库函数缓存,当库函数写满后(4kb)再调用系统调用函数read/write函数进入内核写入内核缓存并立即写入磁盘中。
因此库函数fgetc/fputc速度比系统调用函数read/write函数速度更快。

  1. 缓冲区
    read/write函数被称为Unbuffered I/O.指的是无用户级缓冲区,但不保证不适用内核缓冲区。

3.预读入缓输出机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值