确定ACPI状态文件的长度

时间:2011-05-10 22:25:25

标签: linux acpi

我正在编写一个工具来记录电池电量到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

所以我假设状态文件有一些特别之处。有人可以告诉我它是什么吗?

1 个答案:

答案 0 :(得分:1)

大多数/proc个文件都很特殊。它们的内容不存在于任何地方,但在进程打开并读取给定文件时按需生成。并且每次读取时内容的大小可能不同。因此,他们通常不会宣传任何特定的尺寸。

正确的方法是简单地打开文件并阅读它直到EOF。