基础:open和fopen的区别

1、缓冲文件系统:fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等。

缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件“缓冲区”的大小随机器 而定。

2、非缓冲文件系统:open, close, read, write, getc, getchar, putc, putchar 等。
缓冲文件系统是借助文件结构体指针来对文件进行管理,通过文件指针来对文件进行访问,既可以读写字符、字符串、格式化数据,也可以读写二进制数 据。非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度 快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。

3、详细分析
open 是系统调用 返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引,fopen是C的库函数,返回的是一个指向文件结构的指针。

fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api 
linux中的系统函数是open,fopen是其封装函数,个人观点。仅供参考。

文件描述符是linux下的一个概念,linux下的一切设备都是以文件的形式操作.如网络套接字、硬件设备等。当然包括操作文件。
fopen是标准c函数。返回文件流而不是linux下文件句柄。

设备文件不可以当成流式文件来用,只能用open
fopen是用来操纵正规文件的,并且设有缓冲的,跟open还是有一些区别

一般用fopen打开普通文件,用open打开设备文件

fopen是标准c里的,而open是linux的系统调用.
他们的层次不同.
fopen可移植,open不能

我认为fopen和open最主要的区别是fopen在用户态下就有了缓存,在进行read和write的时候减少了用户态和内核态的切换,而open则每次都需要进行内核态和用户态的切换;表现为,如果顺序访问文件,fopen系列的函数要比直接调用open系列快;如果随机访问文件open要比fopen快。

4、来自论坛的经典回答

open与fopen的区别:

前者属于低级IO,后者是高级IO。
前者返回一个文件描述符(用户程序区的),后者返回一个文件指针。
前者无缓冲,后者有缓冲。
前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。
后者是在前者的基础上扩充而来的,在大多数情况下,用后者。

原文作者;清清飞扬

时间: 2025-01-20 23:52:48

基础:open和fopen的区别的相关文章

open和fopen的区别

open和fopen的区别: 1.缓冲文件系统 缓冲文件系统的特点是:在内存开辟一个"缓冲区",为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存"缓冲区", 装满后再从内存"缓冲区"依此读入接收的变量.执行写文件的操作时,先将数据写入内存"缓冲区",待内存"缓冲区"装满后再写入文件.由此可以看出,内存 "缓冲区"的大小,影响着实际操作外存的次数,内存"

预加载进度条preload——进阶篇

加载 大家看完预加载进度条preload的基础篇是不是觉得制作进度条也没什么难的,哈哈那么让我们来进一步学习 前面基础篇中,只是对大家说了在单一文件中的进度条制作,这里我再给大家介绍一个加载 外部 swf文件(或jpg)的方法. 这里我们用到了MovieClipLoader的loadClip方法,这个方法也没什么难的,只要大家记住他的格式就成了格式如下: var mcl :MovieClipLoader = new MovieClipLoader();//格式的东西,照搬就好var mclLis

[干货,阅后进BAT不是梦]面试心得与总结---BAT、网易、蘑菇街

本文转载自:公众号:JANiubility 前言 之前实习的时候就想着写一篇面经,后来忙就给忘了,现在找完工作了,也是该静下心总结一下走过的路程了,我全盘托出,奉上这篇诚意之作,希望能给未来找工作的人一点指引和总结, 也希望能使大家少走点弯路 , 如果能耐心读完,相信对你会找到你需要的东西. 先说一下LZ的基本情况,LZ是四川某985学校通信专业的研究生(非计算机),大学阶段也就学了C语言,根本没想过最后要成为码农.大四才开始学java,研一下开始学android,所以LZ觉得自己开始就是一个小

云端安全三大注意事项:部署、警报与报告

在云端点安全服务的帮助下,企业用户能够省去内部服务器管理所必需的部署及配置流程,从而将成本立即转化为收益.遗憾的是,不少云基础安全产品只能提供相对原始且较为有限的功能,最终将企业成本推向错误的运作方向.需要提醒大家的是,在对云基础端点安全服务进行评估时,千万不可先入为主地假设某些现有内部功能已经存在于云服务当中.在本文中,我们将共同探讨如何从部署.警报及报告三大方面对云端点安全功能进行准确评估.这里提及的云端点安全对比方案以Tolly集团最近进行的原型部署流程研究为基础,分别来自五家全球知名的云

Asp.net简单实现给图片增加文字水印_实用技巧

经常看见MOP上有人贴那种动态的图片,就是把一个字符串作为参数传给一个动态网页,就会生成一个带有这个字符串的图片,这个叫做文字水印.像什么原来的熊猫系列,还有后来的大树和金条,都挺有意思.就用Asp.net写了一个非常简单的.全部的代码如下: 复制代码 代码如下: <%@ Import Namespace="System" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespa

评论:从国外云计算的政府支持说开去

本文讲的是评论:从国外云计算的政府支持说开去,[IT168 专稿]作为一种IT交付模式,云计算也许仍是新兴事物.但正如互联网诞生后被大学校园.美国政府大力推广一样,目前美国政府机构正在大力推行采用云服务或自行构建云服务的计划.他们的技术决策者似乎普遍持有这种观点:云计算的优点远大于风险:如果精心规划.认真实施,风险是可以缓解的.介于国内目前50%的数据中心增长和改造投资来源于政府(另外30%来自金融业),因而本文主要从美国政府所采取的云计算推动策略出发,谈谈国内云计算环境的建设.     优势远

国外政府积极推进云计算策略

本文讲的是国外政府积极推进云计算策略,[IT168 资讯]作为一种IT交付模式,云计算也许仍是新兴事物.但正如互联网诞生后被大学校园.美国政府大力推广一样,目前美国政府机构正在大力推行采用云服务或自行构建云服务的计划.他们的技术决策者似乎普遍持有这种观点:云计算的优点远大于风险:如果精心规划.认真实施,风险是可以缓解的.介于国内目前50%的数据中心增长和改造投资来源于政府(另外30%来自金融业),因而本文主要从美国政府所采取的云计算推动策略出发,谈谈国内云计算环境的建设. 优势远大于风险 国外政

第二次社交网络大战爆发 谁才是胜利者

中介交易 SEO诊断 淘宝客 云主机 技术大厅 从最开始的bbs到聊天室,再到博客.接着转型到以人人网.开心网为主的社交网站.社交网站演变的历程也是不寻常的.当然,国内的社交网站的演变过程也是在追寻着其它国外网络发展的脚步. 在国外,Facebook成功在先,也给国内的社交网站大展拳脚增加了信心.国内也有不同之处,中国市场同质化的社交网站不止一家,但大部分市场还是被人人网.开心网.腾讯朋友给瓜分了.和已有6年发展时间的老大哥Facebook相比,被认为有网民数量优势的中国社交概念网站规模还远远比

四个步骤加强网络防护_安全相关

   通过采用以下四个步骤,你能够减轻保护网络的压力.下面是一些加强你的网络防护的方法.    最近,微软在宣传如果你想要得到一个真正安全的网络,你必须关注5个重要的领域.这些领域包括周边防护,网络防护,应用防护,数据防护,和主机防护.在本文中,我将讨论网络防护,帮助获得深度安全.    微软的安全哲学是你应该关注五个独立的领域,就好象你需要独立对它们进行防护.这样的话,你就能够确保这些领域都得到了妥善的防护.通过独立地关注这些领域,你还能够确保当其中一项防护受到安全威胁的时候,其他的四层防护还