Linux 标准 I/O 库
2024-09-07 02:54:33
为什么要设计标准 I/O 库?
- 直接使用 API 进行文件访问时,需要考虑许多细节问题,例如:read 、 write 时,缓冲区的大小该如何确定,才能使效率最优
- read 和 write 等底层系统调用函数进行输入输出时,在用户态和内核态之间来回切换,每次读出或写入的数据量较少,导致频繁的 I/O 操作,增加了系统开销
标准 I/O 库是 ANSI C 规范的一部分,函数原型在文件 stdio.h中定义,对底层 I/O 系统
调用进行了封装,为程序员提供了带有格式转换功能的输入输出操作,并在用户空间
增加了缓冲区管理
- 分离了应用程序空间和实际的物理设备
- 减少了直接读盘次数,提高性能
- 读取前查看是否已存在页缓存中,如果已经存放在了页缓存中,数据立即返回给应用程序
- 写数据前先写到页缓存中,如果用户采用的是同步写机制( synchronous writes )),
那么数据会立即被写回到磁盘上,应用程序会一直等到数据被写完为止;
如果用户采用的是延迟写机制( deferred writes ),那么应用程序就完全不需要等到数据
全部被写回到磁盘,数据只要被写到页缓存中去就可以了。
fopen() 函数
fdopen() 函数
// fdopen 函数示例
FILE *fp;
int fd;
if ((fp = fopen ("hello.txt", "w+")) == NULL)
printf("fopen file error\n");
return 0;}
fprintf(fp , "hello word\n");
fclose(fp);
if ((fd = open("hello.txt", O_RDWR )) == 1) {
printf("open file fail\n");
return 0;}
if ((fp = fdopen( fd , "a+")) == NULL)
printf("fdopen open\n");
return 0;
}
fprintf(fp , "linux c program");
fclose(fp);
最新文章
- F-并查集
- python 学习笔记十二 html基础(进阶篇)
- iOS学习之NSPredictae及搜索框的实现
- 使用spark访问elasticsearch的数据
- WordPress Design Approval System插件‘step’参数跨站脚本漏洞
- nopcommerce 二次开发
- zoj 3647 Gao the Grid
- Spring jdbctemplate学习笔记
- Java中Volatile的作用
- HttpClient的使用-爬虫学习1
- 用 openSSL 生成 公钥 私钥
- fedora安装各种应用软件
- Asp.Net生命周期的详解
- js几秒以后倒计时跳转示例
- 如何使用mysqldump备份数据库
- sphinx的安装
- c/c++ 网络编程 UDP 改变IP地址
- centos6.5 MySQL数据库的安装
- 大数据系列博客之 --- 深入简出 Shell 脚本语言(提升篇)
- 使用 nghttpx 搭建 HTTP/2 代理 (转)
热门文章
- CSS Unicode字体
- [Xcode 实际操作]一、博主领进门-(15)读取当前应用的信息
- Promise对象深入理解
- JAVA团队开发手册 - 3. 开发流程
- Eclipse - 安装了jd-eclipse插件后依然无法反编译类文件
- ZROI提高组模拟赛05总结
- [hdu1686] Oulipo【KMP】
- keil_rtx调试技巧
- nodejs 学习(4) express+mongoose
- Storm编程入门API系列之Storm的Topology多个tasks数目控制实现