2011-08-23 110 views
1

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

在此先感谢。

回答

10

系统调用truncate(2)不填充该文件与零。它只是提高了文件的报告大小,并留下了漏洞。

当你读它,你得到零,但这只是一个方便的操作系统。

的截断()和ftruncate()函数导致命名 由路径或通过FD引用的常规文件被截断的尺寸的精确 长度字节。

如果之前的文件较短,则将其扩展,并将扩展的 零件读为空字节('\ 0')

关于(从TLPI)孔:

孔的存在意味着文件的标称尺寸可以比磁盘存储它利用(在某些情况下,量越大 , 相当大)。

文件系统和孔:

而不是分配用于在一个文件中的孔空字节的块,的 文件系统可以只标记(具有值0) 适当的指针i节点和间接指针块中,以指示它们 不引用实际的磁盘块。

由于Per Johansson指出,这取决于文件系统。

大多数本地UNIX文件系统支持文件洞的概念,但许多非本地文件系统(例如Microsoft的VFAT)不支持。在不支持漏洞的 文件系统上,写入文件的显式空字节为 。

+0

...提供的文件系统支持它,但ext2/3/4呢。 –

相关问题