我正在编写一个将电池电量记录到 CSV 文件的工具(我知道这将是一个 bash 单行程序,但这对我来说是另一个 Common Lisp 学习练习)。
我的计划是将整个电池状态文件存储到内存中,因为它保证是一个小文件。但是file-length
在文件大小上始终返回 0,同时在其他文件上正常工作:
* (defun stream-length (path)
(with-open-file (stream path)
(file-length stream)))
STYLE-WARNING: redefining COMMON-LISP-USER::STREAM-LENGTH in DEFUN
STREAM-LENGTH
* (stream-length "/home/duncan/foo")
4
* (stream-length "/proc/acpi/battery/BAT0/state")
0
事实证明,这不仅仅是 SBCL;Perl 的行为方式相同:
$ perl -e 'print -s "/home/duncan/foo"; print "\n"'
4
$ perl -e 'print -s "/proc/acpi/battery/BAT0/state"; print "\n"'
0
但该文件肯定包含一些内容:
$ cat /proc/acpi/battery/BAT0/state
present: yes
capacity state: ok
charging state: discharging
present rate: 0 mW
remaining capacity: 3945 mWh
present voltage: 10800 mV
所以我假设状态文件有一些特别之处。有人可以告诉我它是什么吗?