如何辨别Linux中的open和fopen函数

无路可退的石头

无路可退的石头

2016-02-19 14:37

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享如何辨别Linux中的open和fopen函数吧。

open和fopen是Linux系统的调用函数,因为较为相似,很多人会将其混淆,下面图老师小编给大家介绍下open和fopen的区别之处,不明白的朋友可以来了解下。

 如何辨别Linux中的open和fopen函数

1.缓冲文件系统

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

fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等

2.非缓冲文件系统

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

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

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

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

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

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

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/diannaorumen/)

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

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

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

他们的层次不同。

fopen可移植,open不能

3. 性能

我认为fopen和open最主要的区别是fopen在用户态下就有了缓存,在进行read和write的时候减少了用户态和内核态的切换,而open则每次都需要进行内核态和用户态的切换;

表现为:

(1)如果顺序访问文件,fopen系列的函数要比直接调用open系列快;

(2)如果随机访问文件open要比fopen快。

经典回答:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/diannaorumen/)

前者属于低级IO,后者是高级IO。

前者返回一个文件描述符(用户程序区的),后者返回一个文件指针。

前者无缓冲,后者有缓冲。

前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。

后者是在前者的基础上扩充而来的,在大多数情况下,用后者。

上面就是open和fopen的区别介绍了,两者的区别主要是缓冲的区别,fopen有缓冲而open没有,还有它们的层次也有所不同,fopen可移植而open不能。

展开更多 50%)
分享

猜你喜欢

如何辨别Linux中的open和fopen函数

电脑入门
如何辨别Linux中的open和fopen函数

Linux系统中ioctl函数如何实现?

电脑入门
Linux系统中ioctl函数如何实现?

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何辨别Linux软链接和硬链接

电脑入门
如何辨别Linux软链接和硬链接

javascript中的有名函数和无名函数

Web开发
javascript中的有名函数和无名函数

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何辨别Ubuntu中useradd和adduser命令

电脑入门
如何辨别Ubuntu中useradd和adduser命令

Linux中如何使用和管理交换空间

电脑入门
Linux中如何使用和管理交换空间

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

jQuery toggle()设置CSS样式

jQuery toggle()设置CSS样式

jQuery 白痴级入门教程

jQuery 白痴级入门教程
下拉加载更多内容 ↓