【发布时间】:2010-05-06 00:40:37
【问题描述】:
我想在命名管道上运行 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 命名管道
-
此命令会阻塞,直到您从另一个 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>>
【问题讨论】:
标签: erlang named-pipes tail