gpt4 book ai didi

linux - 确定 ACPI 状态文件的长度

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:12 25 4
gpt4 key购买 nike

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

所以我假设状态文件有一些特殊之处。谁能告诉我这是什么?

最佳答案

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

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

关于linux - 确定 ACPI 状态文件的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com