我正在将显示的舍入后的文件大小值ls -lh
与原始大小(以字节为单位)进行比较(如所示ls -l
)。我很难弄清楚它使用哪种算法从字节转换。
我的假设是,它将单位K,M,G解释为
一方面,我有一个ls -l
报告为2052字节的文件,并ls -lh
四舍五入为2.1K:
$ ls -l usercount.c
-rw-r--r-- 1 squirrel lsf 2052 May 13 15:41 usercount.c
$ ls -lh usercount.c
-rw-r--r-- 1 squirrel lsf 2.1K May 13 15:41 usercount.c
这似乎支持假设(a),因为2052/1000 = 2.052会四舍五入到2.1K,而2052/1024 = 2.0039会四舍五入到小数点后一位显然会显示为2.0K。
另一方面,我还有另一个文件ls -l
报告为7223字节,ls -lh
显示为7.1K:
$ ls -l traverse.readdir_r.c
-rw-r--r-- 1 squirrel lsf 7223 Jul 21 2014 traverse.readdir_r.c
$ ls -lh traverse.readdir_r.c
-rw-r--r-- 1 squirrel lsf 7.1K Jul 21 2014 traverse.readdir_r.c
这令人困惑地支持假设(b),因为7223/1000 = 7.223可以四舍五入为7.2K,而7223/1024 = 7.0537可以四舍五入为所显示的7.1K。
这使我得出结论,我的假设是错误的,并且它既不(a)也不(b)。ls
使用什么算法进行此舍入?
GNU LS默认将全面上涨在1024个为基础的单位。
正如您所认为的那样,它不会四舍五入。
这是来自gnulib human.h的格式化标志:
/* Round to plus infinity (default). */
human_ceiling = 0,
这与您所看到的一切一致:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句