Elixir File.read returns 访问时空数据 /proc/cpuinfo
Elixir File.read returns empty data when accessing /proc/cpuinfo
当 运行 任何像
File.read "/proc/cpuinfo"
>> {:ok, ""}
等效的 erlang 函数相同。这种模式有什么原因吗?
proc 中的条目位于一个名为 procfs 的特殊文件系统下,我相信 Erlang 不支持从中读取。更多信息:https://unix.stackexchange.com/questions/121702/what-happens-when-i-run-the-command-cat-proc-cpuinfo
就像@José 提到的那样,proc fs 很特别,因为文件内容是动态生成的。如果您查看 /proc 中的文件大小,您会发现它们的大小为 0
.
我相信这就是为什么 read
函数无法 return 任何东西,文件是空的!
解决方法是强制读取一定数量的字节,在 Erlang 中你可以这样做:
{ok, FD} = file:open("/proc/cpuinfo", [read]).
file:read(FD, 1024).
要读取所有内容,请继续读取固定数量的字节,直到 EOF 由 read
编辑 return。
当 运行 任何像
File.read "/proc/cpuinfo"
>> {:ok, ""}
等效的 erlang 函数相同。这种模式有什么原因吗?
proc 中的条目位于一个名为 procfs 的特殊文件系统下,我相信 Erlang 不支持从中读取。更多信息:https://unix.stackexchange.com/questions/121702/what-happens-when-i-run-the-command-cat-proc-cpuinfo
就像@José 提到的那样,proc fs 很特别,因为文件内容是动态生成的。如果您查看 /proc 中的文件大小,您会发现它们的大小为 0
.
我相信这就是为什么 read
函数无法 return 任何东西,文件是空的!
解决方法是强制读取一定数量的字节,在 Erlang 中你可以这样做:
{ok, FD} = file:open("/proc/cpuinfo", [read]).
file:read(FD, 1024).
要读取所有内容,请继续读取固定数量的字节,直到 EOF 由 read
编辑 return。