This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[dummy merge]
[perl5.git] / eg / sysvipc / ipcmsg
CommitLineData
d9d8d8de
LW
1#!/usr/bin/perl
2eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
5f05dabc 3 if $running_under_some_shell;
d9d8d8de
LW
4
5require 'sys/ipc.ph';
6require 'sys/msg.ph';
7
8$| = 1;
9
10$mode = shift;
11die "usage: ipcmsg {r|s}\n" unless $mode =~ /^[rs]$/;
12$send = ($mode eq "s");
13
14$id = msgget(0x1234, ($send ? 0 : &IPC_CREAT) | 0644);
15die "Can't get message queue: $!\n" unless defined($id);
16print "message queue id: $id\n";
17
18if ($send) {
19 while (<STDIN>) {
20 chop;
21 unless (msgsnd($id, pack("LA*", $., $_), 0)) {
22 die "Can't send message: $!\n";
23 }
24 }
25}
26else {
27 $SIG{'INT'} = $SIG{'QUIT'} = "leave";
28 for (;;) {
29 unless (msgrcv($id, $_, 512, 0, 0)) {
30 die "Can't receive message: $!\n";
31 }
32 ($type, $message) = unpack("La*", $_);
33 printf "[%d] %s\n", $type, $message;
34 }
35}
36
37&leave;
38
39sub leave {
40 if (!$send) {
41 $x = msgctl($id, &IPC_RMID, 0);
42 if (!defined($x) || $x < 0) {
43 die "Can't remove message queue: $!\n";
44 }
45 }
46 exit;
47}