如何检查是否可以创建给定长度的文件?

时间:2014-12-22 16:51:19

标签: c linux file io size

我想创建一个给定长度的非稀疏文件(即2GB),但我想在实际将内容写入磁盘之前检查是否可行。

换句话说,我想避免在写入时获得 ENOSPC (设备上没有剩余空间)。我不想创建一个大小为2GB的“测试文件”或类似的东西,只是为了检查是否有足够的空间。

这可能吗?

2 个答案:

答案 0 :(得分:5)

使用posix_fallocate(3)

来自说明:

  

函数posix_fallocate()确保分配磁盘空间   对于由描述符fd引用的文件中的字节   范围从偏移量开始并继续为len个字节。之后   成功调用posix_fallocate(),后续写入字节   保证指定的范围不会因为缺乏而失败   磁盘空间

答案 1 :(得分:3)

您可以使用statvfs函数来确定给定文件系统有多少可用字节(和inode)。

这应该足以快速检查,但要记住,这并不能保证你能够写得那么多(或者,就此而言,写作的内容超过了失败) - 其他应用程序也可以写入(或删除)相同的文件系统。所以继续检查各种写入错误。

fallocateposix_fallocate可用于分配(和解除分配)大块。对于您的用例可能是更好的选择。 (查看手册页,您可能会发现很多有趣的空间管理选项。)