我需要创建一个精确 x 位的文件(然后是mmap
')。
我认为使用lseek()
或ftruncate()
就足够了,直到我看到来自各种来源的代码(例如Mozilla)fcntl()
F_PREALLOCATE
首先,然后使用ftruncate()
。
从文档中,我无法确定为什么会这样做,以及是否有必要。
答案 0 :(得分:1)
不,没有必要。如果您使用ftruncate
,则文件可能虚拟构造,意味着块在总分配块数中保留但未真正分配给文件(文件可能相对于文件有孔)他们分配的块)。在这种情况下,块分配将推迟到读取或写入为止。
如果您使用F_PREALLOCATE
,则不会延迟分配。
我不确定这会产生什么真正的不同;可能是时间,但我真的不明白为什么。这可能是一个支离破碎的问题。