0

バッテリー充電を 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

したがって、状態ファイルには何か特別なものがあると思います。誰かがそれが何であるかについて私に教えてもらえますか?

4

1 に答える 1