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

read和fread有什么区别相关推荐

  1. read函数和fread函数的区别

    (1)格式 read: ssize_t read(int fd ,void *buf, size_t count); read用于从文件描述符对应的文件读取数据,调用成功返回读出的字节数;buf为读出 ...

  2. linux系统——fread()与read()函数族区别

    fread与read区别: 1,fread是带缓冲的,read不带缓冲. 2,fopen是标准c里定义的,open是POSIX中定义的. 3,fread可以读一个结构.read在linux/unix中 ...

  3. html input type=quot;filequot;,input[type='file']默认样式

    SVN权限管理 转自:http://www.cnblogs.com/xingchen/archive/2010/07/22/1782684.html /************************ ...

  4. 后端知识点链接(二):操作系统、Linux

    操作系统 2.5w字 + 36 张图爆肝操作系统面试题,太牛逼了! 32位系统和64位系统有什么区别?C++中32位和64位有什么区别?(同花顺提前批) 计算机基础----32位操作系统和64位操作系 ...

  5. 详解C中的系统调用open/close/read/write

    文章目录 open() and close() read() and write() 实操:代码示例 1 将in.txt文件中的内容写入到out.txt文件中(一个一个字符写入) 2 将in.txt文 ...

  6. open,write,read与fopen,fwrite,fread的区别

    open:系统调用,返回的是文件描述符,即文件句柄,是文件在文件描述副表里的索引. fopen:C语言库函数,返回的是一个指向文件结构的指针.fopen是ANSI C标准中的C语言库函数,在不同的操作 ...

  7. fread、fwrite、fopen函数的简单使用和open、read、write区别解析

    这几个函数的区别:fread.fwrite.fopen和open.read.write区别解析 标准C库函数的简单使用 fopen函数原型: #include <stdio.h> FILE ...

  8. fopen /open,read/write和fread/fwrite区别

    fopen /open,read/write和fread/fwrite区别 转载URL:http://hi.baidu.com/%B9%C8%C9%F1%B2%BB%CB%C0jdp/blog/ite ...

  9. fread和 fgets的区别:

    fread和 fgets的区别: fread :以字节位计算长度,按照指定的长度和次数读取数据,遇到结尾或完成指定长度读取后停止 . fgets :整行读取,遇到回车换行或结尾停止.在文本方式时使用. ...

最新文章

  1. 串口监视软件_ESP32 Arduino教程:软件重置
  2. ThinkPHP微信实例——JSSDK图像接口多张图片上传下载并将图片流写入本地
  3. 【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )
  4. Acwing 第 1 场热身赛 【完结】
  5. python如何避免转义字符_如何解决因转义字符而报错的问题(在使用python导入文件时)...
  6. 【bzoj2806】 Ctsc2012—Cheat
  7. python的stack用法_Python numpy.stack函数方法的使用
  8. Java:jar包和war包区别
  9. System V 共享内存 和 系列函数
  10. Android卡片设置透明度失效问题
  11. Drupal常用开发工具(二)——Drupal for Firebug
  12. C 使用异或(xor)加密/解密文件
  13. (转)C# 解析 json
  14. galaxy s8 android pc,【三星GALAXYS8评测】DeX套件替代PC办公环境_三星 GALAXY S8_手机评测-中关村在线...
  15. 两个计算机怎么共享一台打印机共享,两台电脑如何共享打印机 多台电脑共享一台打印机设置方法【详细教程】...
  16. AutoIt 脚本流行编辑工具
  17. 微信公众号平台如何批量给粉丝自动打标签分组
  18. Aqara? 华为?智汀?要真的实现万物互联了吗?
  19. iTween之iTweenPath的使用
  20. access口 环路_交换机二层环路问题处理指南[苍松参考]

热门文章

  1. java 获取时间的方法
  2. sqlserver 18456报错
  3. 老师计算机组合照说说,生物老师座右铭 教师照片墙格言
  4. 这些夕阳产品的编程语言即将死去,有你学的吗?
  5. 【智能卡】智能卡之ISO7816
  6. Vue.js 响应式原理
  7. Matlab二值图像进行轮廓提取
  8. Zabbix监控组件介绍、工作原理、监控方式、监控概念
  9. 计算机中专综合知识,湖南省汨罗市职业中专高考(八)计算机应用专业综合知识试题讲解.doc...
  10. 基于FPGA的简易DDS信号发生器的设计(一)