Apache2-SSI
view release on metacpan or search on metacpan
lib/Apache2/SSI/SharedMem.pod view on Meta::CPAN
=head2 open
Create an access to the shared memory and return a new L<Apache2::SSI::SharedMem> object.
my $shmem = Apache2::SSI::SharedMem->new(
create => 1,
destroy => 0,
# If not provided, will use the one provided during object instantiation
key => 'my_memory',
# 64K
size => 65536,
) || die( Apache2::SSI::SharedMem->error );
# Overriding some default value set during previous object instantiation
my $s = $shmem->open({
mode => 0600,
size => 1024,
}) || die( $shmem->error );
If the L</create> option is set to true, but the shared memory already exists, L</open> will detect it and attempt to open access to the shared memory without the L</create> bit on, which is C<IPC::SysV::IPC_CREAT>
=head2 owner
Sets or gets the shared memory owner, which is by default actually the process id (C<$$>)
=head2 pid
Get the L<semaphore|https://en.wikipedia.org/wiki/Semaphore_(programming)> pid once the shared memory has been opened.
my $pid = $s->pid || die( $s->error );
=head2 rand
Get a random key to be used as identifier to create a shared memory.
=head2 read
Read the content of the shared memory.
You can optionally provide a buffer, and a maximum length and it will put the shared memory content in that buffer up to the maximum length, if it were provided.
It then return the length read, or C<0E0> if no data was retrieved. C<0E0> still is treated as 0, but as a positive value, so you can do:
my $len = $s->read( $buffer ) || die( $s->error );
But you really should more thoroughly do instead:
my( $len, $buffer );
if( !defined( $len = $s->read( $buffer ) ) )
{
die( $s->error );
}
If you do not provide any buffer, you can call L</read> like this and it will return you the shared memory content:
my $buffer;
if( !defined( $buffer = $s->read ) )
{
die( $s->error );
}
The content is stored in shared memory as L<JSON> encoded, but since it is shared, L<read> do some minimal check to see if the data looks like JSON data. It it does not, the data is returned as-is.
=head2 remove
Remove entire the shared memory identified with L</key>
=head2 removed
Returns true if the shared memory was removed, false otherwise.
=head2 semid
Return the L<semaphore|https://en.wikipedia.org/wiki/Semaphore_(programming)> id once the shared memory has been opened. See L<perlipc> for more information about semaphore and L<perlfunc>.
=head2 serial
Returns the serial number used to create or access the shared memory segment.
This serial is created based on the C<key> parameter provided either upon object instantiation or upon using the L</open> method.
The serial is created by calling L<IPC::SysV/ftok> to provide a reliable and repeatable numeric identifier.
=head2 size
Sets or gets the shared memory block size.
This should be an integer representing bytes, so typically a multiple of 1024.
=head2 stat
Sets or retrieve value with L<semaphore|https://en.wikipedia.org/wiki/Semaphore_(programming)>.
If one parameter only is provided, it returns its corresponding value set.
It performs:
# Get the semaphore id
my $id = $s->semid;
my $value = semctl( $id, $sem, IPC::SysV::GETVAL, 0 );
When 2 parameters are provided, this is treated as a key-value pair and sets the value for the corresponding key.
It performs:
my $id = $s->semid;
semctl( $id, $sem, IPC::SysV::SETVAL, $val )
If no parameter is provided it returns a L<Apache2::SSI::SemStat> object in scalar context or an array of value in list context.
=head2 supported
Returns true if IPC shared memory segments are supported by the system, and false otherwise.
=head2 unlock
Remove the lock, if any. The shared memory must first be opened.
$s->unlock || die( $s->error );
=head2 write
( run in 1.717 second using v1.01-cache-2.11-cpan-39bf76dae61 )