分类: LINUX
2011-06-25 12:24:32
如题,看到好多调用设备文件的程序都是用的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