`

缓存冲洗函数

阅读更多
    传统的 UNIX 系统实现在内核中都设有缓冲区高速缓存或页高速缓存,大多数磁盘 I/O 都通过缓冲区进行。当向文件写入数据时,内核通常首先将数据复制到缓冲区中,然后排入队列,晚些时候再写入磁盘。这种方式被称为“延迟写(delayed write)”。
    通常,当内核需要重用缓冲区来存放其他磁盘块数据时,它会把所有延迟写数据块写入磁盘。为了保证磁盘上实际文件系统与缓冲区中内容的一致性,UNIX 系统提供了 sync、fsync 和fdatasync 三个函数。
#include <unistd.h>

int fsync(int fd);
int fdatasync(int fd);
                     /* 返回值:若成功,返回0;否则,返回 -1 */
void sync(void);

    sync 只是将所有修改过的块缓冲区排入写队列,然后就返回,并不等待实际写磁盘操作结束。通常,称为 update 的系统守护进程周期性地调用(一般每隔 30 秒)sync 函数,这就保证了定期冲洗(flush)内核的块缓冲区。UNIX 命令 sync(1) 也调用 sync 函数。
    fsync 函数只对由文件描述符 fd 指定的一个文件起作用,并且等待写磁盘操作结束才返回。fsync 可用于数据库这样的应用程序,这种程序需要确保修改过的块立即写到磁盘上。
    fdatasync 类似于 fsync,但它只影响文件的数据部分。而除数据外,fsync 还会同步更新文件的属性。
分享到:
评论

相关推荐

    清空缓存区1

    1. 使用`fflush()`函数:`fflush()`函数主要用于冲洗流中的信息,可以清除读写缓冲区。例如,`fflush(stdin)`可以刷新标准输入缓冲区,`fflush(stdout)`则刷新标准输出缓冲区。需要注意的是,`fflush()`对于标准输入...

    fib_rules.rar_fds_memory

    内存冲洗操作通常涉及清除缓存数据,确保数据被写入持久存储,或者在程序退出或状态改变时清理资源。而“session”可能指的是用户会话,或者更具体地说,是程序运行期间的一系列交互。关闭会话可能包括清理会话数据...

    php中flush()、ob_flush()、ob_end_flush()的区别介绍

    1. flush()函数:此函数会强制将已经缓存的所有输出发送到客户端,不等待缓冲区满。如果你想要立即刷新缓冲区内的数据到浏览器,那么使用flush()是正确的选择。在有些情况下,比如希望实时地输出某些动态变化的内容...

    婚恋网站java源码-interview-preparation:面试准备

    阐明函数签名、输入、输出 从想到的第一个解决方案开始运行至少 1-2 个示例 写下步骤,以免错过任何一步 注释!!! 检查边缘情况 用合理的变量名清理 提炼前问面试官有没有问题 细化解决方案 澄清假设冲洗,重复...

    FatFs文件系统说明文档中文翻译

    8. **f_sync**:冲洗写入文件的缓存信息,确保数据安全写入存储介质。 9. **f_opendir**:打开一个目录,返回一个目录句柄,用于后续的目录遍历操作。 10. **f_readdir**:读取指定目录中的下一个条目,获取文件或子...

    Elasticsearch 技术解析与实战.zip

    56 2.5 索引监控 60 2.5.1 索引统计 60 2.5.2 索引分片 62 2.5.3 索引恢复 63 2.5.4 索引分片存储 64 2.6 状态管理 64 2.6.1 清除缓存 64 2.6.2 索引刷新 64 2.6.3 冲洗 65 2.6.4 合并索引 65 2.7 文档管理 66 2.7.1...

    Hibernate Reference 4.3.4 zh_CN 中文版

    - **二级和查询缓存**:解释了缓存机制的工作原理以及如何配置缓存策略。 - **查询语言替代**:提到了Hibernate提供的查询语言(HQL)和原生SQL查询的使用场景。 - **Hibernate统计信息**:介绍了如何启用统计收集...

Global site tag (gtag.js) - Google Analytics