linux系统文件IO
2019-10-29 16:05:13来源:博客园 阅读 ()
linux系统文件IO
本文重点说明下面内容:
- 什么是标准IO,什么是文件IO?
- 什么是Direct IO?
- O_SYNC标识有什么意义?
- 各个层面的缓存如何同步?
IO路径上的各层buff
Application buff
|
clib buff
|
page cache
|
disk cache
标准IO
- 标准IO操作的是流(File对象)
- 标准IO可以设置缓存,这个缓存是用户态buffer,一般称为clib buff
api
#include <stdio.h>
//打开流
FILE *fopen(const char *pathname, const char *type);
//关闭流
int fclose(File *fp);
// 刷新流
int fflush(FILE *fp);
// 一次读写一个字符
int fgetc(FILE *fp);
int fputc(FILE *fp);
// 一次读写一行
char* fgets(char* buf, int n, FILE* fp);
int fputs(const char *str, FILE* fp);
// 二进制读写
size_t fread(void *ptr, size_t size, size_t nobj, FILE *fp);
size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *fp);
// 格式化输入输出
int fprintf(FILE *fp, const char* format, ...);
int fscanf(FILE *fp, const char *format, ...);
// 示例
#include <stdio.h>
#include <stdlib.h>
int main(void){
char buf[1024];
while (fgets(buf, 1024, stdin) != NULL)
if (fputs(buf, stdout) == EOF)
printf("output error");
if (ferror(stdin))
printf("input error");
exit(0);
}
说明
- 调用fwrite, fputc, fputs系列函数后,数据被保存到clib buf中,依然处于用户态,如果此时应用进程crash掉,这些数据将丢失。
- 在调用fflush可将clib buf中的数据写入内核的page cache中。
- 调用fclose也会将clib buff中的数据刷新到内核,并且把clib buff中的输入数据丢弃。
从这些标准IO的API可看出,标准IO比文件IO要简洁很多,没有各种标识,没有sync, nonblock等。
上列API具体使用细节可参考《unix环境高级编程》第5章。
文件IO
文件IO是直接操作linux系统调用,大部分的问题都是使用文件IO带来的。
API
原文链接:https://www.cnblogs.com/holidays/p/linux_io.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Linux最常用命令
- Linux系统如何设置开机自动运行脚本? 2020-06-11
- Linux指令和shell脚本 2020-06-11
- 适合开发者的最佳Linux发行版 2020-06-11
- 文件压缩和打包 2020-06-11
- RAID 1 软件实现(Linux 系统) 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash