是否可以在linux中创建具有固定大小的文件?

时间:2011-08-23 08:54:26

标签: c linux file-io

我需要一个能在linux中创建固定大小的文件的函数。像truncatefopen,fseek,fclose这样的函数不是解决方案,因为它们会用零填充打开的文件,但它没有必要,我没有时间这样做。那么是否有一些函数,只打开一个固定长度的文件,而不是填充缓冲区?

提前致谢。

1 个答案:

答案 0 :(得分:10)

系统调用truncate(2) 未使用零填充文件。它只是提升文件的报告大小并在其中留下漏洞。

当你从中读取时,你得到零,但这只是操作系统的便利。

  

truncate()和ftruncate()函数会导致名为的常规文件   通过路径或由fd引用被截断为精确的大小   长度字节。

     

如果以前的文件较短,则会进行扩展,并进行扩展   part 读取为空字节('\ 0')

关于漏洞(来自TLPI):

  

孔的存在意味着文件的标称尺寸可能更大   而不是它使用的磁盘存储量(在某些情况下,   相当大)。

文件系统和漏洞:

  

不是为文件中的孔分配空字节块,而是   文件系统只能标记(值为0)适当的指针   i节点和间接指针块表示它们   不要引用实际的磁盘块。

Per Johansson所述,这取决于文件系统。

  

大多数原生UNIX文件系统都支持文件漏洞的概念,但是   许多非本地文件系统(例如,微软的VFAT)没有。在一个   不支持漏洞的文件系统,显式空字节   写到文件。