gpt4 book ai didi

filesystems - fsync vs写系统调用

转载 作者:行者123 更新时间:2023-12-03 15:40:17 24 4
gpt4 key购买 nike

我想问一个基本的问题,即使用fsync之类的系统调用何时有用?我是初学者,我总是给人以写足以写入文件的印象,而使用write的示例实际上在末尾写入了文件。

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

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

最佳答案

将其视为缓冲层。

如果您熟悉fopenfprintf之类的标准C调用,您应该已经意识到C运行时库自身中发生的缓冲。

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

但是,仅因为操作系统具有它,并不意味着它就在磁盘上。它也可能在操作系统中得到缓冲。

这就是fsync处理的,确保将OS缓冲区中的内容物理写入磁盘。

您可能通常会在日志记录库中看到这种操作:

fprintf (myFileHandle, "something\n");  // output it
fflush (myFileHandle); // flush to OS
fsync (fileno (myFileHandle)); // flush to disk
fileno是一个函数,可为您提供给定 int文件句柄的基础 FILE*文件描述符,描述符上的 fsync进行最终的刷新级别。

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

As well as logging libraries, one other use case may be useful for this behaviour. Let me see if I can remember what it was. Yes, that's it. Databases! Just like Berzerkely DB. Where you want to ensure the data is on the disk, a rather useful feature for meeting ACID requirements :-)

关于filesystems - fsync vs写系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10371017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com