创建大小为 "x" 的文件以与 mmap 等一起使用的正确方法

Proper way to create file of size "x" for use with mmap, ect

我需要创建一个精确 x 位的文件(然后将是 mmap')。

我认为使用 lseek()ftruncate() 就足够了,直到我看到来自各种来源的代码(例如 Mozilla)使用 fcntl()F_PREALLOCATE 首先然后使用ftruncate()

从文档中,我无法确定为什么要这样做,以及是否有必要。

不,没有必要。如果您使用 ftruncate ,则文件可能是 virtually 构建的,这意味着块保留在总分配块数中但并未真正分配给文件(文件可以有孔相对于它们分配的块)。在这种情况下,块分配会延迟到对其进行读取或写入。

如果您使用 F_PREALLOCATE,则不会延迟分配。

我不确定这是否会产生真正的影响;可能是时候了,但我真的不明白为什么。这可能是一个碎片问题。