在/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
答案 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
应显示为正确的正文件大小。