Chinaunix首页 | 论坛 | 博客
  • 博客访问: 207866
  • 博文数量: 166
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-21 17:29
文章分类

全部博文(166)

文章存档

2015年(60)

2014年(99)

2013年(7)

我的朋友

分类: LINUX

2014-02-21 10:29:09

原文地址:open()与fopen()的区别 作者:暗夜linux

如题,看到好多调用设备文件的程序都是用的open函数,难道用fopen不可以吗?

主要求高手谈谈这两个函数的区别,以及具体在什么时候该用哪个函数?

 

第 1 楼    tent8()

2006-8-26 17:53:47

得分:2   

fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api

linux中的系统函数是open,fopen是其封装函数,个人观点。仅供参考。

 

第 2 楼    fytzzh(我爱summer)

2006-8-26 20:12:19

得分:6   

文件描述符是linux下的一个概念,linux下的一切设备都是以文件的形式操作.如网络套接字、硬件设备等。当然包括操作文件。

fopen是标准c函数。返回文件流而不是linux下文件句柄。

 

第 3 楼    lurenfu(具有中国特色的社会主义初级阶段,一百年不变)

2006-8-28 16:27:38

得分:2   

设备文件不可以当成流式文件来用,只能用open

fopen是用来操纵正规文件的,并且设有缓冲的,跟open还是有一些区别

 

第 4 楼    grass312(十步杀一人)

2006-8-28 20:03:37

得分:2   

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

 

第 5 楼    hjmhjms(大笨汪)

2006-8-29 11:50:44

得分:2   

fopen是标准c里的,而open是linux的系统调用.

他们的层次不同.

fopen可移植,open不能

 

第 6 楼    cllr(寂寞2001)

2006-8-29 20:13:08

得分:6   

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

fopen是有缓冲机制的,它使用了FILE这个结构才保存缓冲数据。   
  open没有缓存机制,每次读操作都直接从文件系统中获取数据。   
  看一下FILE这个结构的定义就知道区别了,FILE包含了一个open返回回来的handle

阅读(191) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~