将数据从c发送到perl

ham*_*mSh 4 c linux perl shared-memory

我需要从c程序向Perl程序发送一些数据,这些数据都处于运行模式(睡眠模式下的Perl程序和c程序运行,c程序将数据发送到Perl).

我知道,可以通过套接字和共享内存编写这个程序,但我有性能问题.我认为共享内存是更好的解决方案,我怎样才能发信号通知Perl程序唤醒并恢复运行并读取c发送的数据?

mfo*_*ani 7

你似乎有两个问题:

  1. 如何在Perl程序和C程序之间共享内存,以及
  2. 如何向Perl程序发出信号,有新数据可用

假设您所在的系统允许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-