文件大小可以是负数吗?为什么?

时间:2011-07-27 10:58:30

标签: posix filesize

/coreutils-8.12/src/ls.c,我发现了这条评论:

/* POSIX requires that a file size be printed without a sign, even
when negative.  Assume the typical case where negative sizes are
actually positive values that have wrapped around.  */

在第2639行。

我的问题是: - 他们提到的典型案例是什么? - 除了BIG文件和旧系统出现问题之外,文件大小可以是负数吗? - 如果是,为什么?(为什么我应该像他们在上面的评论中那样关心?)

我也对其他系统感兴趣,而不仅仅是POSIX

2 个答案:

答案 0 :(得分:3)

这可能意味着POSIX中的文件大小应该被视为无符号整数,而不是签名。文件大小>>如果表示为32位整数,2GB将显示为负数,但显然不是。

答案 1 :(得分:1)

查看评论下面的代码:

static uintmax_t
unsigned_file_size (off_t size)
{
  return size + (size < 0) * ((uintmax_t) OFF_T_MAX - OFF_T_MIN + 1);
}

如果size为负数,则会通过添加一些定义的值(最可能是32位数据类型的2 ^ 31附近等)将其更改为正数。

这可以防止典型错误,例如将2-4 GB的文件大小分配给有符号整数,这将导致负数,而ls应显示为正确的正文件大小。