Возникла странная проблема: открываю файл с PerlIO layer'ом ":mmap", делаю на нём binmode($fh), пишу туда данные CBOR-кодированные. Ну и отправлюсь в глубокий сон AE::cv->recv
Потом открываю этот файл:
use 5.16.1;
use Time::HiRes qw(time);
open my $fh, "<:mmap", "/tmp/mmap.15669";
binmode($fh);
use CBOR::XS qw(decode_cbor);
my $s=time();
my $csh3=do{local $/;<$fh>};
my $h=decode_cbor($csh3);
print (time()-$s)," sec\n"
И получаю:
unexpected end of CBOR data, at offset 2326528 (octet 0x00) at -e line 1, <$fh> line 1.
При этом реальный размер записанных данных - 2329390. Т.е. запинается явно не на кривом конце файла или чём-то подобном.
Отсюда возник вопрос: возможно, я как-то не так пользуюсь layer'ом?
А может, стоит использовать Sys::Mmap (говорит: permission denied при попытке открыть для mmap'а несуществующий файл в /tmp) или File::Map? Или ещё что-то...
Мне нужно просто расшарить кусок дико бинарных данных между процессами: записать его один раз, сказать всем процессам через ZMQ (раз уж IPC почему-то не в фаворе у современных программистов), что «нате, забирайте свой бинарный шит» каждый процесс возьмёт заmmap'леное содержимое чудо-файлика, decode_cbor'ит его - и будет счастье.
Но что-то не срастается нифига, не могу понять, почему :(
Any ideas?