Я хочу запустить хвост по именованному каналу, чтобы облегчить обработку двоичного журнала. Проблема в том, что таинственные данные добавляются в начало потока. Я запускаю свои тесты, запустив процесс erlang с открытым портом (open_port), а затем я использую другую оболочку для посылки bin в именованный канал.Хвост двоичного файла в Erlang добавляет таинственную битовую строку
Вот простая функция для получения данных из порта:
bin_from_tail() ->
open_port({spawn,"/usr/bin/tail -F named_pipe"},
[binary,in,eof]),
receive
{_,{data,<<Data/binary>>}} -> Data
end.
Так вот два пути для меня, чтобы захватить одни и те же данные ...
Создать именованный канал
mkfifo named_pipe
Эта команда блокируется до тех пор, пока вы не запустите «c на log.bin> named_pipe "из другой оболочки
{ok, TailBin} = file: 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>>
Bigup! Спасибо, что поделился. Как вы сказали, все говорят об этом, и никто не делится примером кода. –