Linux 标准 I/O 库
为什么要设计标准 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);
Linux 标准 I/O 库的更多相关文章
- Linux C 文件操作,系统调用 -- open()、read() 和 标准I/O库 -- fopen()、fread()
函数汇总: open().write().read().close() fopen().fwrite().fread().fclose() 一.什么是文件 在讲述文件操作之前,我们首先要知道什么是文件 ...
- Linux 文件操作——系统调用和标准I/O库
一.什么是文件 在讲述文件操作之前,我们首先要知道什么是文件.看到这个问题你可能会感觉到可笑,因为对于用过计算机的人来说,文件是最简单不过的概念了,例如一个文本是一个文件,一个work文档是一个文件等 ...
- linux标准io的copy
---恢复内容开始--- 1.linux标准io的copy #include<stdio.h> int main(int argc,char **argv) { if(argc<3) ...
- Linux中的动态库和静态库(.a/.la/.so/.o)
Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...
- Linux 标准目录结构
初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...
- 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解 多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...
- Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名
Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名 转载自:http://b ...
- 在Linux中创建静态库.a和动态库.so
转自:http://www.cnblogs.com/laojie4321/archive/2012/03/28/2421056.html 在Linux中创建静态库.a和动态库.so 我们通常把一些公用 ...
- 【转】分析Linux和windows动态库
原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Lin ...
随机推荐
- 进击python第4篇:初探模块
模块,用一砣代码实现了某个功能的代码集合,任何python程序都可以作为模块导入,n个 .py 文件组成的代码集合就称为模块. but 为什么要引入模块概念?主要原因是代码重用(code reuse) ...
- CF888E Maximum Subsequence(meet in the middle)
给一个数列和m,在数列任选若干个数,使得他们的和对m取模后最大( \(1<=n<=35\) , \(1<=m<=10^{9}\)) 考虑把数列分成两份,两边分别暴力求出所有的可 ...
- PJzhang:robots协议的实际场景
猫宁!!! 参考链接: https://bbs.360.cn/thread-15062960-1-1.html https://ziyuan.baidu.com/college/courseinfo? ...
- git 创建分支并关联远程分支
从master分支,重新拉取出一个新的分支,名字为dev,具体命令如下: 1. 切换到被copy的分支(master),从服务器拉取最新版本 $git checkout master $git pul ...
- python的正则表达式支持(链接)
http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
- socket连接 代码
dispatch_sync(dispatch_get_global_queue(, ), ^{ // 处理耗时操作的代码块... // 创建socket /* 1.AF_INET: ipv4 执行ip ...
- python 基础(四) 函数
函数 一.什么是函数? 函数是可以实现一些特定功能的 小方法 或者是小程序 优点: 提高 了代码的后期维护 增加了代码的重复使用率 减少了代码量 提高了代码可读性 二.函数的定义 使用 def关键+函 ...
- Day2课后作业:sed替换程序
#!/usr/bin/env python #_*_conding:utf-8_*_ import sys,os old_file = sys.argv[1] new_file = sys.argv[ ...
- ARP数据包
结构ether_header定义了以太网帧首部:结构arphdr定义了其后的5个字段,其信息用于在任何类型的介质上传送ARP请求和回答:ether_arp结构除了包含arphdr结构外,还包含源主机和 ...
- 洛谷 P4549 【模板】裴蜀定理
https://www.luogu.org/problemnew/show/P4549 (1)证明方程ax+by=gcd(a,b)(a,b为常数;a>0,b>0;a,b,x,y为整数)有解 ...