首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fsync与write系统调用

fsync与write系统调用
EN

Stack Overflow用户
提问于 2012-04-29 17:17:21
回答 1查看 3.3K关注 0票数 6

我想问一个基本问题,什么时候使用像fsync这样的系统调用是有用的。我是初学者,我一直认为write就足以写入文件,而使用write的示例实际上是在最后写入文件。

那么像fsync这样的系统调用的目的是什么呢?

只是为了提供一些背景知识,我使用的是Berkeley DB库版本5.1.19,有很多关于fsync()的成本与仅仅编写代码的讨论。这就是我想知道的原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-29 17:39:09

可以把它想象成一个缓冲层。

如果您熟悉像fopenfprintf这样的标准C调用,您应该已经知道在C运行时库中发生的缓冲。

刷新这些缓冲区的方法是使用fflush,它确保信息从C运行时库传递到操作系统(或周围环境)。

然而,仅仅因为操作系统拥有它,并不意味着它在磁盘上。它也可以在操作系统中得到缓冲。

这就是fsync所负责的,确保OS缓冲区中的内容以物理方式写入磁盘。

您通常会在日志库中看到这类操作:

代码语言:javascript
复制
fprintf (myFileHandle, "something\n");  // output it
fflush (myFileHandle);                  // flush to OS
fsync (fileno (myFileHandle));          // flush to disk

fileno是一个函数,它为给定的int文件句柄提供底层FILE*文件描述符,描述符上的fsync执行最后一级刷新。

现在,这是一个相对昂贵的操作,因为磁盘写入通常比内存中传输慢得多。

和日志库一样,另一个用例可能对此行为有用。让我看看我能不能记住那是什么。是的,就是这样。数据库!就像Berzerkely DB一样。您希望确保数据位于磁盘上的位置,这是一个非常有用的特性,用于满足ACID需求:-)

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

https://stackoverflow.com/questions/10371017

复制
相关文章

相似问题

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