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

akm*_*mal 1 c linux file-io

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

提前致谢.

cni*_*tar 10

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

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

truncate()和ftruncate()函数使得由path命名或由fd引用的常规文件被截断为精确长度字节的大小.

如果先前的文件较短,则会扩展,扩展部分读取为空字节('\ 0').

关于孔(来自TLPI):

孔的存在意味着文件的标称大小可能大于它使用的磁盘存储量(在某些情况下,相当大).

文件系统和漏洞:

文件系统可以在i节点和间接指针块中标记(使用值0)适当的指针,而不是为文件中的空穴分配空字节块,以指示它们不引用实际磁盘块.

正如Per Johansson所说,这取决于文件系统.

大多数本机UNIX文件系统都支持文件漏洞的概念,但许多非本地文件系统(例如,微软的VFAT)却不支持.在不支持漏洞的文件系统上,将显式空字节写入文件.