Похоже, у вас есть два вопроса:
- как разделить память между программой Perl и вашей C-программой и
- как сообщить программе Perl, что появились новые данныедоступно
Предполагая, что вы работаете в системе, которая разрешает вызовы SysV IPC, вы можете использовать IPC :: ShareLite , чтобы разделить часть памяти между двумя процессами.
Как обычно, с общей памятью, вы должны убедиться, что блокировки на месте.Страница руководства модуля для IPC :: ShareLite, кажется, объясняет сложности и вызовы метода довольно хорошо.
Что касается сигнализации программы Perl, что есть новые данные, ничто не мешает вам использовать ... сигналы для достижениятот!Ваша C-программа может отправить SIGUSR1 в Perl-программу, а Perl-программа получит доступ к общей памяти и выполнит какие-либо действия при получении сигнала, а в противном случае перейдет в режим сна.* для этого, но суть этого что-то вроде этого:
use strict;
use warnings;
use IPC::ShareLite;
# init shared memory
sub do_work {
# use shared memory, as you just received a signal
# indicating there's new data available
my $signame = shift;
# ...
}
$SIG{USR1} = \&do_work; # when signaled with SIGUSR1, call do_work()
# else just sleep
while(1) { sleep 1; }
Надеюсь, это поможет,
-marco-