- 浏览: 148200 次
-
文章分类
最新评论
传统的 UNIX 系统实现在内核中都设有缓冲区高速缓存或页高速缓存,大多数磁盘 I/O 都通过缓冲区进行。当向文件写入数据时,内核通常首先将数据复制到缓冲区中,然后排入队列,晚些时候再写入磁盘。这种方式被称为“延迟写(delayed write)”。
通常,当内核需要重用缓冲区来存放其他磁盘块数据时,它会把所有延迟写数据块写入磁盘。为了保证磁盘上实际文件系统与缓冲区中内容的一致性,UNIX 系统提供了 sync、fsync 和fdatasync 三个函数。
sync 只是将所有修改过的块缓冲区排入写队列,然后就返回,并不等待实际写磁盘操作结束。通常,称为 update 的系统守护进程周期性地调用(一般每隔 30 秒)sync 函数,这就保证了定期冲洗(flush)内核的块缓冲区。UNIX 命令 sync(1) 也调用 sync 函数。
fsync 函数只对由文件描述符 fd 指定的一个文件起作用,并且等待写磁盘操作结束才返回。fsync 可用于数据库这样的应用程序,这种程序需要确保修改过的块立即写到磁盘上。
fdatasync 类似于 fsync,但它只影响文件的数据部分。而除数据外,fsync 还会同步更新文件的属性。
通常,当内核需要重用缓冲区来存放其他磁盘块数据时,它会把所有延迟写数据块写入磁盘。为了保证磁盘上实际文件系统与缓冲区中内容的一致性,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 还会同步更新文件的属性。
发表评论
-
打开伪终端设备
2018-07-09 20:50 1285在伪终端概述一节中已对 PTY进行了初步的介绍。尽管 ... -
伪终端概述
2018-06-02 11:05 1620伪终端就是指,一个应用程序看上去像一个终端,但事实上它 ... -
终端窗口大小和 termcap
2018-05-29 22:39 829多数 UNIX 系统都提供了一种跟踪当前终端窗口大小的 ... -
终端规范模式和非规范模式
2018-05-29 00:25 993终端规范模式很简单:发一个读请求,当一行已经输入后,终 ... -
终端标识
2018-05-23 11:18 593尽管控制终端的名字在多数 UNIX 系统上都是 /de ... -
波特率和行控制函数
2018-05-22 07:53 971虽然大多数终端设 ... -
终端属性和选项标志
2018-05-20 07:40 728tcgetattr 和 tcsetattr ... -
终端特殊输入字符
2018-05-17 06:33 842终端支持下表所示的特殊输入字符。 为了更改 ... -
终端 I/O 综述
2018-05-10 07:56 463终端设备可认为是由内核中的终端驱动程序控制的。每个终端 ... -
POSIX 信号量
2018-05-09 00:03 604在XSI IPC通信之信 ... -
XSI IPC 通信之共享存储
2018-04-25 07:18 973在XSI IPC通信之消息队列和XSI IPC通信之信 ... -
XSI IPC通信之信号量
2018-04-17 23:38 647在XSI IPC通信之消 ... -
XSI IPC通信之消息队列
2018-04-15 10:54 534消息队列是消息的链接表,存储在内核中,由消息队列标识符 ... -
XSI IPC 相似特征介绍
2018-02-08 23:48 510有 3 种称作 XSI IPC ... -
IPC 通信之 FIFO
2018-02-06 22:55 463FIFO 也被称为命名管道,未命名的管道只能在两个相关 ... -
IPC 通信之管道
2018-01-30 22:22 416管道是 UNIX 系统 IPC 的最古老但也是最常用的 ... -
readv/writev 函数及存储映射 I/O
2018-01-19 00:57 936readv 和 writev 函数可用于在一次函数调用 ... -
POSIX 异步 I/O
2018-01-16 21:33 491POSIX 异步 I/O 接口为对不同类型的文件进行异 ... -
fcntl 记录锁
2018-01-06 23:48 667记录锁的功能是:当有进程正在读或修改文件的某个部分时, ... -
守护进程惯例
2018-01-06 23:52 465UNIX 系统中,守护进程遵循下列通用惯例。 ...
相关推荐
1. 使用`fflush()`函数:`fflush()`函数主要用于冲洗流中的信息,可以清除读写缓冲区。例如,`fflush(stdin)`可以刷新标准输入缓冲区,`fflush(stdout)`则刷新标准输出缓冲区。需要注意的是,`fflush()`对于标准输入...
内存冲洗操作通常涉及清除缓存数据,确保数据被写入持久存储,或者在程序退出或状态改变时清理资源。而“session”可能指的是用户会话,或者更具体地说,是程序运行期间的一系列交互。关闭会话可能包括清理会话数据...
1. flush()函数:此函数会强制将已经缓存的所有输出发送到客户端,不等待缓冲区满。如果你想要立即刷新缓冲区内的数据到浏览器,那么使用flush()是正确的选择。在有些情况下,比如希望实时地输出某些动态变化的内容...
阐明函数签名、输入、输出 从想到的第一个解决方案开始运行至少 1-2 个示例 写下步骤,以免错过任何一步 注释!!! 检查边缘情况 用合理的变量名清理 提炼前问面试官有没有问题 细化解决方案 澄清假设冲洗,重复...
8. **f_sync**:冲洗写入文件的缓存信息,确保数据安全写入存储介质。 9. **f_opendir**:打开一个目录,返回一个目录句柄,用于后续的目录遍历操作。 10. **f_readdir**:读取指定目录中的下一个条目,获取文件或子...
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提供的查询语言(HQL)和原生SQL查询的使用场景。 - **Hibernate统计信息**:介绍了如何启用统计收集...