我想在命名管道上运行 tail 以促进一些二进制日志文件处理。问题是神秘数据被添加到流的开头。我通过使用打开的端口 (open_port) 启动 erlang 进程来运行我的测试,然后我使用另一个 shell 将 bin 放入命名管道中。
这是一个从端口获取数据的简单函数:
bin_from_tail() ->
open_port({spawn,"/usr/bin/tail -F named_pipe"},
[binary,in,eof]),
receive
{_,{data,<<Data/binary>>}} -> Data
end.
所以这里有两种方法让我获取相同的数据......
创建命名管道
mkfifo named_pipe
此命令会一直阻塞,直到您从另一个 shell 运行“cat log.bin > named_pipe”
{ok,TailBin} = 文件:read_file(log.bin)。
使用 erlang 文件库 FileBin = file:read_file(log.in) 将整个文件读入内存。
但是 TailBin 和 FileBin 是不一样的!TailBin 开头有一个神秘的 120 字节字符串:
<<40,6,161,69,172,216,56,14,100,0,80,6,0,0,0>>