访问/ proc/cpuinfo时,Elixir File.read返回空数据

dji*_*inn 6 erlang elixir

什么时候运行

File.read "/proc/cpuinfo"
>> {:ok, ""}
Run Code Online (Sandbox Code Playgroud)

对于等效的erlang函数也是如此.这种模式有什么理由吗?

joh*_*hlo 9

就像@José提到的那样,proc fs很特殊,因为文件内容是动态生成的.如果你查看/ proc中的文件大小,你会发现它们的大小0.

我相信这就是read函数无法返回任何内容的原因,文件是空的!

解决方法是强制读取多个字节,在Erlang中你可以这样做:

{ok, FD} = file:open("/proc/cpuinfo", [read]).
file:read(FD, 1024).
Run Code Online (Sandbox Code Playgroud)

要读取所有内容,请继续读取固定的字节数,直到返回EOF read.

  • 在**elixir中创建等价的``File.stream!("/ proc/cpuinfo",[],:line)|> Enum.each(fn chunk - > String.strip(chunk)|> IO.puts end) ` (6认同)