博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 标准 I/O 库
阅读量:4959 次
发布时间:2019-06-12

本文共 962 字,大约阅读时间需要 3 分钟。

为什么要设计标准 I/O 库?

  1. 直接使用 API 进行文件访问时,需要考虑许多细节问题,例如:read 、 write 时,缓冲区的大小该如何确定,才能使效率最优
  2. read 和 write 等底层系统调用函数进行输入输出时,在用户态内核态之间来回切换,每次读出或写入的数据量较少,导致频繁的 I/O 操作,增加了系统开销

标准 I/O 库是 ANSI C 规范的一部分,函数原型在文件 stdio.h中定义,对底层 I/O 系统

调用进行了封装,为程序员提供了带有格式转换功能的输入输出操作,并在用户空间

增加了缓冲区管理

  • 分离了应用程序空间和实际的物理设备
  • 减少了直接读盘次数,提高性能
  1. 读取前查看是否已存在页缓存中,如果已经存放在了页缓存中,数据立即返回给应用程序
  2. 写数据前先写到页缓存中,如果用户采用的是同步写机制 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);

转载于:https://www.cnblogs.com/51try-again/p/11037303.html

你可能感兴趣的文章
怎样使用linux的iptables工具进行网络共享
查看>>
《HTML5与CSS3实战指南》——导读
查看>>
RHEL6下安装oracle 10g(一)
查看>>
Kconfig的格式
查看>>
关于Cursor的moveToFirst和moveToNext的意义
查看>>
个人--工资划分5份
查看>>
有关文件下载的文件名
查看>>
史上最详细的wamp配置虚拟域名步骤
查看>>
oracle 授权
查看>>
lv扩展磁盘空间
查看>>
java8之stream流的基本操作
查看>>
二维数组计算协方差java
查看>>
SpringBoot下Redis相关配置是如何被初始化的
查看>>
为你的AliOS Things应用增加自定义cli命令
查看>>
MongoDB 创建基础索引、组合索引、唯一索引以及优化
查看>>
百度PaddlePaddle常规赛NLP赛道火热开启
查看>>
稳了!这才是cookie,session与token的真正区别
查看>>
OSChina 周二乱弹 —— 假期余额已不足!
查看>>
前端那些事之React篇--helloword
查看>>
ios的google解析XML框架GDataXML的配置及使用
查看>>