文件IO(系统IO和标准IO)
2016-02-18 09:33
274 查看
Linux系统下操作文件有两类基本API,一类由系统调用提供,被称为系统IO。一类由标准C库提供,被称为标准IO。
拓展:
它们都是Linux下操作文件的标准接口,那又有什么区别?我们该如何选择使用呢?
第一:系统IO是更底层的接口,因此任何设备和文件最终都是可以通过系统IO来操作。系统IO不提供缓冲区,意味着每次读写都必须进入内核,对于大数据量的读写操作会影响效率。
第二:标准IO是由标准库提供的接口,因此功能更加丰富,而且标准IO提供缓冲区,增加数据处理的吞吐量。标准IO还对读写操作提供更加丰富的操作方式,例如按字节、按行、按块、按数据格式读写。但是有些特殊文件无法使用标准IO,比如socket套接口,比如LCD显示屏。
第三:在能使用标准IO的场合,我们尽量使用它,毕竟它功能丰富效率高,但在无法使用标准IO的场合,我们还是只能用系统IO。
第四:所谓的系统IO,就是指这样的一堆函数:
open()
read()
wirte()
lseek()
ioctl()
close()
等等
所谓的标准IO,指的是这一堆函数:
fopen()
fgets()
fread()
scanf()
getchar()
fputs()
fwrite()
printf()
fseek()
fclose()
等等。
拓展:
它们都是Linux下操作文件的标准接口,那又有什么区别?我们该如何选择使用呢?
第一:系统IO是更底层的接口,因此任何设备和文件最终都是可以通过系统IO来操作。系统IO不提供缓冲区,意味着每次读写都必须进入内核,对于大数据量的读写操作会影响效率。
第二:标准IO是由标准库提供的接口,因此功能更加丰富,而且标准IO提供缓冲区,增加数据处理的吞吐量。标准IO还对读写操作提供更加丰富的操作方式,例如按字节、按行、按块、按数据格式读写。但是有些特殊文件无法使用标准IO,比如socket套接口,比如LCD显示屏。
第三:在能使用标准IO的场合,我们尽量使用它,毕竟它功能丰富效率高,但在无法使用标准IO的场合,我们还是只能用系统IO。
第四:所谓的系统IO,就是指这样的一堆函数:
open()
read()
wirte()
lseek()
ioctl()
close()
等等
所谓的标准IO,指的是这一堆函数:
fopen()
fgets()
fread()
scanf()
getchar()
fputs()
fwrite()
printf()
fseek()
fclose()
等等。
相关文章推荐
- Android开发艺术探索读书笔记(二)
- 2015年十大测试工具你认识几个?
- 面试题1:落单的数
- MyCat源码分析系列之——配置信息和启动流程
- MyCat源码分析系列之——前后端验证
- click
- MySQL数据类型和属性设置
- 在rhel7中搭建openstack kilo
- unity shader 固定管线实例(四) 渲染不一样的背面
- 机器学习中的神经网络Neural Networks for Machine Learning:Lecture 9 Quiz
- 剖析设计模式编程中C#对于组合模式的运用
- 深入理解Java中的HashMap的实现原理
- 程序员的编程能力层次模型
- jmeter ---测试TCP服务器/模拟发送TCP请求
- Android开发艺术探索读书笔记(一)
- Aspose.Words 替换word值和保存打印
- 解决水平ListView在ScrollView中出现的滑动冲突
- 解决水平ListView在ScrollView中出现的滑动冲突
- 架构之路(三):单元测试
- 解决水平ListView在ScrollView中出现的滑动冲突