ham*_*mSh 4 c linux perl shared-memory
我需要从c程序向Perl程序发送一些数据,这些数据都处于运行模式(睡眠模式下的Perl程序和c程序运行,c程序将数据发送到Perl).
我知道,可以通过套接字和共享内存编写这个程序,但我有性能问题.我认为共享内存是更好的解决方案,我怎样才能发信号通知Perl程序唤醒并恢复运行并读取c发送的数据?
你似乎有两个问题:
假设您所在的系统允许SysV IPC调用,您可以使用IPC :: ShareLite在两个进程之间共享一块内存.
与通常的共享内存一样,您必须确保锁定到位.IPC :: ShareLite的模块手册页似乎很好地解释了复杂性和方法调用.
关于Perl程序的信号,有新的数据可用,没有什么可以阻止你使用...信号来实现这一点!您的C程序可以将SIGUSR1发送到Perl程序,Perl程序将访问共享内存并在接收信号时执行操作,否则将睡眠.
看看perldoc perlipc,但它的要点是这样的:
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; }
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助,
-marco-