文件IO_文件同步(附Linux-5.15.10内核源码分析)

news2024/11/25 1:06:40

目录

1.为什么要进行文件同步?

2.fsync函数介绍

2.1 fsync函数

2.2 fsync函数内核源码分析

2.3 fsync函数使用示例

3.fdatasync函数介绍

3.1 fdatasync函数

3.2 fdatasync函数内核源码分析

3.3 fdatasync函数使用示例

4.sync函数介绍

4.1 sync函数

4.2 sync函数使用示例

5.文件同步函数对比


1.为什么要进行文件同步?

在Linux系统中,文件系统通常使用缓冲区来提高文件读写性能。

当应用程序对文件进行写操作时,数据首先会被写入到内核的缓冲区中,而不是直接写入到磁盘。这样可以减少磁盘I/O的次数,提高文件读写的效率。

然而,这种缓冲机制也存在一个问题,就是当发生系统崩溃或意外的断电等情况时,还未写入磁盘的数据将会丢失,导致数据的不一致性或丢失。

为了避免这种情况的发生,需要通过文件同步来确保数据的持久性和一致性。

通过进行文件同步,可以确保以下几点:

  • 数据持久性:通过将缓冲区中的数据写入到磁盘,可以避免由于系统崩溃或断电等意外情况导致数据丢失。
  • 数据一致性:同步操作不仅会将文件数据写入磁盘,还会同步文件的元数据(如权限、所有权等)。这样可以确保文件系统中的数据与磁盘中的数据一致,避免数据损坏或不一致的情况。 系统稳定性:

通过定期进行文件同步,可以减少系统出现故障的可能性,提高系统的稳定性和可靠性。

需要注意的是,文件同步会引起一定的性能开销,因为它需要将数据写入磁盘。因此,在实际应用中,需要根据具体场景和需求权衡数据的持久性和性能之间的关系,选择合适的同步策略和时机。

2.fsync函数介绍

2.1 fsync函数

#include <unistd.h>

int fsync(int fd);

函数简介:fsync函数是一个用于将文件数据及元数据同到磁盘的系统调用函数。的目的是确保文件的修改已经完全写入到磁盘中,以防止数据丢失或损坏。

函数参数:

fd:文件描述符,指向需要同步的文件。

函数返回值:

成功:返回0。

失败:返回-1,并设置errno。

2.2 fsync函数内核源码分析

 图 2-1 fsync函数内核源码调用流程

fsync和fdatasync内核调用核心流程差不多,执行完系统调用后,统一调用do_fsync函数,fsync和fdatasync函数调用do_fsync函数传递的datasync实参(只同步数据,不同步元数据)不一样,fsync函数datasync为1表示只同步数据,fsync函数datasync为0表示即同步数据也同步元数据。

fdatasync不会调用mark_inode_dirty_sync函数,fsync则会调用,该函数的作用是更新元数据为DIRTY状态,后续同步元数据将用到该状态。

file->f_op->fsync函数不同的文件系统实现方式不一样,如图2-1是以generic_file_fsync函数为例进行分析,generic_file_fsync会先同步数据,然后再判断是否满足同步元数据条件(fdatasync不同步元数据)再调用sync_inode_metadata函数进行元数据同步。

最后再调用blkdev_issue_flush函数通知底层同步文件。

2.3 fsync函数使用示例

int fsync_test(bool datasync) {
    int fd = open(TEST_FILE, O_RDWR | O_CREAT | O_TRUNC, 0644);
    if (fd == -1) {
        perror("open error");
        return -1;
    }

    write_len_data(fd, 10, 'c');

    int ret = 0;
    if (datasync) {
        fdatasync(fd);
    } else {
        fsync(fd);
    }
    if (ret == -1) {
        perror("fsync error");
        close(fd);
        return -1;
    }

    close(fd);

    return 0;
}

3.fdatasync函数介绍

3.1 fdatasync函数

#include <unistd.h>

int fdatasync(int fd);

函数简介:fdatasync函数是一个用于将文件数据同步到磁盘的系统调用函数,与fsync函数类似。它会将文件的数据部分(不包括元数据)同步到磁盘,以确保文件的修改已经完全写入到磁盘中。 fdatasync函数与fsync函数的区别在于,fdatasync只同步文件的数据部分,而不同步文件的元数据(如权限、所有权等)。

由于不涉及元数据的同步,fdatasync相比fsync可以更快地完成操作。

函数参数:

fd:文件描述符,指向需要同步的文件。

函数返回值:

成功:返回0。

失败:返回-1,并设置errno。

3.2 fdatasync函数内核源码分析

参考fysnc函数内核源码分析。

3.3 fdatasync函数使用示例

参考fsync函数使用示例。

4.sync函数介绍

4.1 sync函数

#include <unistd.h>

void sync(void);

函数简介:sync函数是一个文件系统同步函数,用于将文件系统缓冲区中的数据写入到磁盘,并确保所有挂载的文件系统都已同步。

函数参数:

函数返回值:

sync函数通常在以下情况下使用:

  • 在关机之前,调用sync函数可以确保所有数据都已写入磁盘,避免数据丢失或损坏。
  • 在进行重要操作(如升级操作)之前,调用sync函数可以确保数据的持久性,以防止操作过程中发生意外情况。
  • 在性能测试或基准测试中,调用sync函数可以确保每次测试之间的数据一致性,并避免测试结果受到缓冲区数据的影响。

4.2 sync函数使用示例

void sync_test() {
    sync();
}

5.文件同步函数对比

 表 5-1 文件同步函数对比

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/765222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一阶段-第十一章 Python基础的综合案例(数据可视化-地图可视化)

目录 一、基础地图使用  1.学习目标  2.视觉映射器  3.本节的演示二、疫情地图-国内疫情地图  1.案例效果  2.函数的语法  3.本节的代码演示三、疫情地图-省级疫情地图  1.案例效果  2.本节的代码演示 说明&#xff1a;该文章是学习 黑马程序员在B站上分享的视…

SPRINGBOOT部署安装hello world

1.安装JAVA环境&#xff0c;设置为全局变量 用以下方法检查&#xff0c;安装是否正确 2.maven安装&#xff0c;并且修改setting中的镜像设置&#xff0c;改为国内阿里云镜像 3.idea中设置JDK版本号&#xff0c;IDEA中springboot不要选择3.0版本&#xff0c;会出现与jdk不匹…

如何在照片上添加水印?这三个方法让你轻松实现

我有个朋友他是一名摄影爱好者&#xff0c;他在旅行中经常能捕捉到一些绝美的照片。他为了分享这份美丽&#xff0c;决定将它们上传到社交媒体上。但是&#xff0c;他很担心别人未经许可就盗用了他的作品。于是他来想我请教这个问题。我就给他推荐了几款加水印软件&#xff0c;…

(学习笔记-TCP基础知识)TCP与UDP区别

UDP UDP不提供复杂的控制机制&#xff0c;利用IP提供面向[无连接]的通信服务。 UDP协议非常简单&#xff0c;头部只有8个字节(位)&#xff0c;UDP的头部格式如下&#xff1a; 目标和源端口&#xff1a;主要是告诉UDP协议应该把报文发给哪个进程包长度&#xff1a;该字段保存了…

CentOS目录详解

在centos中&#xff0c;最顶层的目录称作根目录&#xff0c; 用/表示。/目录下用户可以再创建目录&#xff0c;但是有一些目录随着系统创建就已经存在&#xff0c;接下来重点介绍几个常用目录。 /bin&#xff08;binary&#xff09;包含了许多所有用户都可以访问的可执行文件&a…

轻松实现金蝶云星空与赛意SMOM系统的全面集成

1. 金蝶云星空&#xff1a;为运营协同与管控型企业提供通用ERP服务平台 金蝶云星空是基于当今先进管理理论和数十万家国内客户最佳应用实践开发的ERP服务平台。它针对事业部制、多地点、多工厂等企业和集团公司&#xff0c;提供了通用的企业资源计划&#xff08;ERP&#xff0…

win键无效,键盘Win组合键突然不不能用如何解决?

电脑win键失效怎么办&#xff1f; 在使用windows系统的时候&#xff0c;发现一个问题&#xff0c;就是win键失效了&#xff0c;怎么按都没有反应&#xff0c;该怎么办呢&#xff1f; 键盘方面的原因 此时之是键盘的原因与系统本身没有关系&#xff0c;键盘屏蔽热键主要目标是…

【技能实训】DMS数据挖掘项目-Day13

文章目录 任务15【任务15.1】ClientFrame.java【任务15.2】ClientFrame.java【任务15.3】实现匹配日志信息或物流数据的数据保存功能&#xff08;保存到本地文件&#xff09;&#xff0c;将15.2中&#xff0c;返回的匹配数据&#xff0c;保存到客户端文件中【任务15.4】实现物流…

恢复软件哪些好?推荐3款,亲试好用!

“想问下朋友们有什么好的恢复软件推荐吗&#xff1f;我的电脑数据经常都莫名其妙就找不到了&#xff0c;我也不敢随意进行操作。如果有好的数据恢复软件&#xff0c;快给我推荐推荐吧&#xff01;” 电脑数据很多都是比较重要的&#xff0c;如果经常丢失数据&#xff0c;会对我…

DV SSL证书

一、DV SSL证书是什么&#xff1f; DV SSL&#xff08;又称域名验证型证书&#xff09;是便宜又快速实现网站HTTPS加密、有效防劫持的SSL证书。购买DV证书仅需百十元起&#xff0c;只需验证域名的所有权&#xff0c;3-5分钟极速签发。因此&#xff0c;DV SSL证书成为众多个人网…

探索新机遇,助力娱乐社交新增长丨网易云信亮相 PMTalk 北京产品运营大会

近日&#xff0c;在 PMTalk 联合网易易盾、网易云信主办的北京产品运营大会上&#xff0c;网易云信娱乐社交产品经理聂夏军介绍了 AIGC 与娱乐社交行业融合并助力业务新增长的思路&#xff0c;并分享了网易云信在帮助开发者业务增长方面的探索和实践经验。 由于国内娱乐社交市场…

nginx推流环境搭建

目录 1、创建安装文件夹2、安装编译 nginx 所需要的库3、下载 nginx-1.21.6.tar.gz下载 nginx-rtmp-module4、解压解压nginx文件解压rtmp模块5、编译6、安装7、启动nginx,检测nginx是否能成功运行8、配置nginx使用RTMP9、重启nginx服务器1、创建安装文件夹 cd ~ mkdir nginx …

无参数读文件和RCE总结

什么是无参数&#xff1f; 顾名思义&#xff0c;就是只使用函数&#xff0c;且函数不能带有参数&#xff0c;这里有种种限制&#xff1a;比如我们选择的函数必须能接受其括号内函数的返回值&#xff1b;使用的函数规定必须参数为空或者为一个参数等 接下来&#xff0c;从代码…

基于51单片机和proteus的温室大棚系统

此系统是基于51单片机和proteus的仿真设计&#xff0c;功能如下&#xff1a; 1. LCD1602实时显示光照/土壤湿度/温度值及设定值。 2. 按键可增减光照/土壤湿度/温度设定阈值。 3. 获取到的温度低于设定温度则打开加热设备。 4. 获取到的光照值低于设定光照值则打开补光灯。…

「车型分析」控制系统典型应用车型 —— 停车机器人

如今&#xff0c;城市可用土地的日益稀缺&#xff08;城市化&#xff09;和汽车使用数量的增加&#xff08;机动化&#xff09;,为了可持续性发展和其他生活质量问题相结合&#xff0c;由此孕育出来了一种自动停车系统。停车机器人凭借其灵活、高效、标准化的停车模式&#xff…

高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测教程

详情点击链接&#xff1a;高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测 第一&#xff1a;预测平台及安装 一、高精度气象预测基础 综合气象观测数值模拟模式&#xff1b; 全球预测模式、中尺度数值模式&#xff1b; 二、自动化预测平台 Linux系统 Crontab…

直播软件源码开发搭建提高安全性方案

随着互联网技术的发展与普及&#xff0c;直播软件源码平台早已深入到大家生活当中&#xff0c;人们常常在直播软件源码平台中去获取资讯、发布资讯或是去寻找想要的物品。但是&#xff0c;直播软件源码平台虽是一款放松娱乐、获取资讯等作用的软件&#xff0c;但也包含了用户们…

IDEA实用设置及插件

一、IDEA实用设置 二、IDEA实用插件 1. aiXcoder是一个基于最先进的深度学习技术的强大的代码完成器和代码搜索引擎。它有可能向您推荐一整行代码&#xff0c;这将帮助您更快地进行编码。AiXcoder还提供了一个代码搜索引擎&#xff0c;帮助您在GitHub上搜索API用例。 2. 阿里…

【25】SCI易中期刊推荐——神经网络科学(中科院4区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

学术论文——2.学术论文编写规则(参考国家标准GB/T 7713.2-2022)

目录 1 组成部分 1.1 一般要求 1.2 前置部分 1.3 正文部分 1.4 附录部分 2 编排格式要求 2.1 编号要求 2.2 量和单位 2.3 图表 2.4 数字 2.5 数学式 3 字号和字体 该规则的适用范围包括一切反映自然、社会和人文等的科学体系的学术论文&#xff0c;规定了学术论文…