首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unix - aio_fsync用法的C语言中的AIO

Unix - aio_fsync用法的C语言中的AIO
EN

Stack Overflow用户
提问于 2015-12-12 10:45:10
回答 1查看 712关注 0票数 1

我不明白aio_fsync这个函数是干什么的。我读过手册页,甚至搜索过,但找不到一个可以理解的定义。你能用简单的方式解释一下吗,最好是举个例子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-12 20:06:45

aio_fsync只是fsync的异步版本;当两者都已经完成时,所有数据都会被写回物理驱动器媒体。

注1: aio_fsync()只是启动请求;fsync()-like操作直到请求完成才能完成,类似于其他aio_*调用。

注2:只有在调用aio_* ()时已经排队的aio_fsync操作才包括在内。

正如您所提到的,如果不使用fsync或aio_fsync,程序结束后数据仍将显示在文件中。然而,,如果机器突然关闭,它很可能就不在那里了。

这是因为当您写入文件时,操作系统实际上会写入Page Cache,这是内存中保存的磁盘扇区的副本,而不是磁盘本身。当然,即使在将数据写回磁盘之前,您仍然可以看到RAM中的数据。当您调用fsync()或aio_fsync()时,它将确保将写入()、aio_writes()等写入该文件的所有部分,而不仅仅是将其写入物理磁盘。

如果您从未调用fsync()等,那么只要有空闲时间,OS就会将数据写回驱动器。或者有秩序的操作系统关闭也应该做到这一点。

我想说的是,您通常不应该担心手动调用这些数据,除非您需要确保您的数据(比如日志记录)被刷新到物理磁盘,并且需要更有可能在突然的系统崩溃中幸存下来。显然,数据库引擎将对交易和日志进行此操作。

然而,还有其他原因,数据可能无法生存,这是非常复杂的,以确保绝对的一致性,在面对故障。因此,如果您的应用程序不一定需要它,那么让操作系统为您管理这一点是完全合理的。例如,如果编译器的输出.o由于您在编译过程中或编译后的短时间内循环机器而导致不完整/损坏,那么它不会让任何人感到惊讶--您只需重新启动构建操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34238917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档