当前位置:   article > 正文

fread、fwrite、fopen函数的简单使用和open、read、write区别解析_fopen、fread、fwrite…等函数,与open、read、write…等函数的区别是( )

fopen、fread、fwrite…等函数,与open、read、write…等函数的区别是( )a前者

一、fread、fwrite、fopen和read、write、open的区别解析:

1、fopen和open区别:

(1)来源:

  • open 是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件描述符表里的索引
  • fopen 是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针

(2)移植性:

  • fopen是C标准函数,因此拥有良好的移植性;而open是UNIX系统调用,移植性有限。如windows下相似的功能使用API函数CreateFile

(3)缓冲文件系统:

  • 缓冲文件系统是借助于文件结构体指针 FILE* 来对文件进行管理,通过文件指针对文件进行访问,即可以读写字符、字符串、格式化数据,也可以读写二进制数据

缓冲文件系统特点:

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

缓冲文件系统的IO函数主要包括:

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

(4)非缓冲文件系统:

  • 非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出
  • 它不设文件结构体指针,只能读写二进制文件(对于UNIX系统内核而言,文本文件和二进制代码文件并无区别),但效率高、速度快,由于ANSI标准不再包括非缓冲文件系统,因此,在读取正规的文件时,建议大家最好不要选择它。

非缓冲文件系统的IO函数主要包括:

open, close, read, write, getc, getchar, putc, putchar等
  • 1

举个例子:

  1. 如果文件的大小是8k。
  2. 你如果用read/write,且只分配了2K的缓存,则要将此文件读出需要做4次系统调用来实际从磁盘上读出。如果你用fread/fwrite,则系统自动分配缓存,则读出此文件只要一次系统调用从磁盘上读出。也就是用read/write要读4次磁盘,而用fread/fwrite则只要读1次磁盘。效率比read/write要高4倍。
  3. 如果程序对内存有限制,
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/256447
推荐阅读
相关标签
  

闽ICP备14008679号