【问题标题】:How to check if a file of given length can be created?如何检查是否可以创建给定长度的文件?
【发布时间】:2015-02-20 19:16:57
【问题描述】:

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

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

这可能吗?

【问题讨论】:

  • Windows? Linux?微波炉?汽车ABS?互联网路由器?手机?电梯控制器?
  • 大声笑。对不起。 Linux。 C语言
  • 我回滚了你上次的编辑,刚刚添加了Linux标签,C标签已经存在了。
  • 不过,您仍可能希望在计划用于此目的的存储设备上添加详细信息。

标签: c linux file io size


【解决方案1】:

使用posix_fallocate(3)

来自描述:

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

【讨论】:

    【解决方案2】:

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

    这对于快速检查来说已经足够了,但请记住,这并不能保证您能够写出尽可能多的东西(或者,就此而言,写得更多会失败) - 其他应用程序可以也正在写入(或删除)同一个文件系统。所以请继续检查各种写入错误。

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

    【讨论】:

      猜你喜欢
      • 2010-10-01
      • 2010-09-23
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      相关资源
      最近更新 更多