详解文件的写入和文件同步
来源:互联网 发布:佳能dpp软件下载 mac 编辑:程序博客网 时间:2024/05/21 09:55
为了提高文件的写入效率,在现代操作系统中,当用户调用write函数,将一些数据写入到文件的时候,os通常会将写入数据暂时保存在一个内存缓冲区里面(例如,unix系统实现在内核中设有缓冲区高速缓存或页高速缓存,当我们向文件写入数据时,内核通常先将数据复制到缓冲区中,然后排入队列,晚些时候再写入磁盘),这种方式称为延迟写,等到缓冲区的空间被填满,或者超过了指定的时限,或者内核需要重用缓冲区存放其它磁盘块数据时,才会真正将缓冲区中的所有数据写入到磁盘里面。
这种做法虽然提高了效率,但也为写入数据带来了安全问题,如果计算机停机,则保存在缓冲区中的写入数据将丢失。为了保持一致性,即向文件写入数据立即真正的写入到磁盘上的文件中,而不是先写到内存缓冲区里面,则我们需要采取文件同步,
一般unix系统提供了3个同步函数 sync,fsync,fdatasync
#include <unistd.h>int fsync(int fd);int fdatasync(int fd); //成功返回0,出错返回-1void sync(void);
先介绍fsync和fdatasync函数: (详细参加高编P65)
fsync 函数只对由文件描述符fd指定的一个文件起作用,它先将内存缓冲区中的数据(主要是针对于此文件描述符fd的写入数据)给冲洗到磁盘上的缓冲区(注意这里是磁盘上的缓冲区),并且等待写磁盘操作完成(写磁盘操作可以理解为将磁盘缓冲区里面的数据进一步冲洗到磁盘上的数据块中,此数据块为文件所拥有的,此时数据真正存在于文件所拥有的磁盘块上)
fdatasync函数类似于fsync,但是它只影响文件的数据部分,而除数据外,fsync还会同步更新文件的属性(如文件大小等)
注意:这两个函数一般应用在数据库这样的程序中,可以确保立即将内存缓冲区中的数据写入到磁盘上
sync函数:只是将内存缓冲区中的数据冲洗到磁盘的缓冲区上,然后就返回,它并不等待实际的写磁盘操作完成,通常,称为update的系统守护进程周期性的调用sync函数,这就保证了定期冲洗内存缓冲区。
简单理解
文件写入:只是写入到了内存缓冲区,可能还没有写到文件所拥有的磁盘数据块上
文件同步:将缓冲区中的内容冲洗到磁盘上
- 详解文件的写入和文件同步
- log4net写入数据库和文件的方法
- Android 建立文件夹和文件并向文件写入文本
- 云服务器之间实时文件同步和文件备份的最简单高效的免费方案
- ssh验证解决远程拷贝文件和文件同步需要输入密码的问题
- Opera的安装、目录和文件详解
- Linux的用户组和文件权限详解
- sl4j日志可在本地写入控制台和文件,在服务器不能写入文件
- SqlServer文件和文件组的用途
- linux 查看文件和文件的大小
- 流和文件(文件的保存)
- struts2的文件上传和文件下载
- 文件读写和文件指针的移动
- 文件和文件组
- sql server 2005数据库中的文件和文件组的详解
- sqlite内存数据库和文件数据库的同步
- sqlite内存数据库和文件数据库的同步
- Nlog配置会话和文件同时写入
- ImageLoader使用
- org.apache.hadoop.util.PlatformName
- 对于IIS上的应用程序池监控
- centOS 安装nginx
- MySQL2
- 详解文件的写入和文件同步
- 用JAX-WS在Tomcat中发布WebService
- AndroidVerifyBoot
- 一个分布式服务器集群架构方案
- 人脸识别 - Sparsifying Neural Network Connections for Face Recognition
- Java对象的序列化和反序列化
- 大一暑假集训总结
- ROS机器人操作平台的安装
- tomcat回顾