バッテリー充電を CSV ファイルに記録するツールを作成しています (これは bash のワンライナーになると思いますが、これは私にとってもう 1 つの 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
したがって、状態ファイルには何か特別なものがあると思います。誰かがそれが何であるかについて私に教えてもらえますか?