Copyright © tutorialspoint.com

PERL shmctl Function


Syntax

shmctl ID, CMD, ARG


Definition and Usage

Controls the shared memory segment referred to by ID, using CMD with ARG. You will need to import the IPC::SysV module to get the command tokens defined below in Table.

Command 	Description
IPC_STAT 	Places the current value of each member of
		the data structure associated with ID into
		the scalar ARG

IPC_SET 	Sets the value of the following members o
		of the data structure associated with ID to
		the corresponding values found in the packed
		scalar ARG

IPC_RMID 	Removes the shared memory identifier specified
		by ID from the system and destroys the shared
		memory segment and data structure associated
		with it

SHM_LOCK 	Locks the shared memory segment specified by ID
		in memory

SHM_UNLOCK 	Unlocks the shared memory segment specified by ID

Return Value

  • undef on failure

  • 0 but true if the return value from the shmctl( ) is 0

Example

Try out following example:

#!/usr/bin/perl

# Assume this file name is  writer.pl

use IPC::SysV;

#use these next two lines if the previous use fails.
eval 'sub IPC_CREAT {0001000}' unless defined &IPC_CREAT;
eval 'sub IPC_RMID {0}'        unless defined &IPC_RMID;

$key  = 12345
$size = 80;
$message = "Pennyfarthingale.";

# Create the shared memory segment

$key = shmget($key, $size, &IPC_CREAT | 0777 ) or 
			die "Can't shmget: $!";

# Place a string in itl
shmwrite( $id, $message, 0, 80 ) or die "Can't shmwrite: $!";


sleep 20;

# Delete it;

shmctl( $id, &OPC_RMID, 0 ) or die "Can't shmctl: $! ";

Write a reader program which retrieves the memory segment corresponding to $key and reads its contents using shmread();.

#!/usr/bin/perl

# Assume this file name is reader.pl

$key = 12345;
$size = 80;

# Identify the shared memory segment
$id = shmget( $key, $size, 0777 ) or die "Can't shmget: $!";

# Read its contents itno a string
shmread($id, $var, 0, $size) or die "Can't shmread: $!";

print $var;

Now First run writer.pl program in background and then reader.pl then it will produces following result.

$perl writer.pl&
$perl reader.pl

Pennyfrathingale

Copyright © tutorialspoint.com