NAME
Win32::MMF - Win32 Memory Mapped File (MMF) Support for Perl
SYNOPSIS
use Win32::MMF;
$debugmode = mmf_GetDebugMode(); # 0 - off, 1 - on
mmf_SetDebugMode($debugmode);
$fh = mmf_CreateFile($filename); # Create new swap file
$fh = mmf_OpenFile($filename); # Open existing swap file
mmf_CloseHandle($fh); # Close openned swap file handle
$ns = mmf_CreateFileMapping($fh, $filesize, $namespace);
$ns = mmf_OpenFileMapping($namespace); # Use existing namespace
mmf_CloseHandle($ns); # Close openned namespace
$var = mmf_MapViewOfFile($ns, $offset, $size) # Create a view inside the namespace
mmf_UnmapViewOfFile($var); # Delete the view
mmf_Poke($var, $str, length($str)); # Store a string into view
$str = mmf_Peek($var); # Retrieve a string from the view
mmf_PokeIV($var, $i); # Store a number(long) into view
$i = mmf_PeekIV($var); # Retrieve a number from the view
ABSTRACT
This module provides Windows' native Memory Mapped File Service for inter-process or intra-process communication under Windows. The module is written in XS and is currently supported only under Windows NT/2000/XP.
The current version of Win32::MMF is available on CPAN at:
http://search.cpan.org/search?query=Win32::MMF
CREDITS
All the credits go to my beloved wife Jenny and son Albert, and I love them forever.
DESCRIPTION
use strict;
use warnings;
use Win32::MMF;
# define a swap file
my $swapfile = undef;
my $namespace = 'Win32::MMF::MyString';
# fork a process
defined(my $pid = fork()) or die "Can not fork a child process!";
if ($pid) {
# in parent
my ($swap, $ns) = UseNamespace($namespace);
# create a view of 100 bytes inside the namespace
my $view = mmf_MapViewOfFile($ns, 0, 100);
my $str = "This is a test";
print "Write: $str\n";
mmf_Poke($view, $str, length($str));
sleep(3);
mmf_UnmapViewOfFile($view);
mmf_CloseHandle($ns);
mmf_CloseHandle($swap);
} else {
# in child
sleep(1); # wait for parent to finish writing
my ($swap, $ns) = UseNamespace($namespace);
# create a view of 100 bytes inside the namespace
my $view = mmf_MapViewOfFile($ns, 0, 100);
my $str = mmf_Peek($view);
print "Read: $str\n";
mmf_UnmapViewOfFile($view);
mmf_CloseHandle($ns);
mmf_CloseHandle($swap);
}
sub UseNamespace {
my $namespace = shift;
# attempt to use existing namespace
my $ns = mmf_OpenFileMapping($namespace);
# open or create swap file if namespace does not exist
my $swap = 0;
if (!$ns) {
if ($swapfile) {
# use external swap file
$swap = mmf_OpenFile($swapfile) if -f $swapfile;
$swap = mmf_CreateFile($swapfile) if !$swap;
}
# create a 1000-byte long shared memory namespace
$ns = mmf_CreateFileMapping($swap, 1000, $namespace);
}
return ($swap, $ns);
}
AUTHOR
Roger Lee <roger@cpan.org>