笔试简答题1
1.缓冲文件系统和非缓冲文件系统的区别在程序中,对于文件的读写,程序运行时间主要消耗在I/O上。与读写硬盘上的文件慢很多;每次读取和写入文件的内容很少,那么程序运行时间主要消耗在I/O上。
文件缓冲系统:磁盘<---->缓冲池(0.5k)<---->二进制流(变量描述符集合)
解释:系统会自动的给每一个正在使用的文件开辟一块缓存区,缓存区的大小一般由各个C的版本规定,一般为512BYTE(0.5K)大小。从磁盘向内存读取数据时,则一次将一些数据从磁盘送至内存缓冲区(满载),然后在从缓冲区逐个将数据送给接收变量(文本描述符);从内存向磁盘写入数据时,同样先将数据填满缓冲区,再一次性将数据从缓冲区送到磁盘。
形象理解:缓存区就类似一个中间的包文件,将单个的数据进行汇总,打包,然后进行传送。这样就减少了单个输入输出直接访问磁盘的次数,减少对磁盘的实际读写次数。
依赖:文本结构体指针,可以进行读写字符、字符串、格式化数据等。
磁盘读写过程: 磁盘每次读写都要移动磁头并寻找磁道扇区,花费一定的时间。
管理文件方式:缓冲文件系统是借助文本结构体指针来对文件进行管理,通过文件指针来对文件进行访问,既可以读写字符、字符串、格式化数据,也可以读写二进制数据。
常用操作函数:缓冲文件系统函数一般是有f开头的函数,如fopen(),fwrite(),fread()等。
缓冲文件输入输出:标准输入输出(标准I/O)--缓冲的I/O操作
注:全缓冲I/O和行缓冲I/O
全缓冲I/O:在缓冲区填满后才进行实际的I/O操作。在磁盘上的文件常常使用标准I/O库函数实施全缓冲。
行缓冲I/O:指在输入或输出中遇到换行符时,执行实际的I/O操作。
形象图解:
非文件缓冲系统:磁盘(文件) <-----> 二进制文件(变量流)
解释: 非文件缓冲系统不会自动分配缓冲区,需要用户根据自己的需要去设置,在传统的UNIX下,用缓冲文件系统处理文本文件,用非缓冲文件系统来处理二进制文件。非缓冲文件系统依赖操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,他不涉及文本结构指针,只能读写二进制文件,但效率高、速度快。ANSI标准不再包括非缓冲文件系统。
依赖:操作系统
特点:只能读写二进制文件, 效率高、速度快,在遇到突发事件时(例如断电),内容不会丢失。
缺点:频繁进行I/O操作,非常消耗CPU。
常用操作函数:open() ,read(),write(),lek(),clo()等。
非缓冲文件系统输入输出:系统输入输出(系统I/O)
形象图解:
笔试简答题2
2.open和fopen的区别1.open为非缓冲文件系统操作函数,无缓冲;fopen为缓冲文件系统操作函数,中间有缓冲区。
2.open一般打开系统文件,在POSIX中定义;fopen打开普通文件,在标准C语言库里面定义。即open是系统调用,fopen是标准库调用。
3.open不能移植,fopen可移植。
4.open返回文本描述符(整数),fopen返回文本结构指针。
5.fopen进行读写操作时,减少了用户态和内核态的切换,open每次都需要进行内核态和用户态的切换,整体速度较慢。
顺序访问文件:fopen系列的函数要比直接调用open系列快;随机访问文件:open要比fopen系列快。
6.open可以指定权限,而fopen不能指定文件创建的权限。
Linux系统架构:
注:
应用程序可以通过调动Linux系统调用接口编程,也可以使用标准库编程。C标准库函数本身也是通过系统调用接口(操作系统API)实现的。
下面是相关的参考文献:
缓冲I/O与非缓冲I/O(fopen与open系列函数区别) 系统调用与C库 - Tim的嵌入式之旅 - CSDN博客
Linux(C/C++)下的文件操作open、fopen与freopen - Boblim - 博客园
本文部分内容参考至网络,如有错误,敬请指正,如有侵权,请联系修改。
本文发布于:2023-02-28 20:14:00,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/167766520382561.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:fopen(fopen.doc
本文 PDF 下载地址:fopen(fopen.pdf
留言与评论(共有 0 条评论) |