[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/5.10.0/i586-linux-thread-multi/IPC/ -> Msg.pm (source)

   1  # IPC::Msg.pm
   2  #
   3  # Copyright (c) 1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
   4  # This program is free software; you can redistribute it and/or
   5  # modify it under the same terms as Perl itself.
   6  
   7  package IPC::Msg;
   8  
   9  use IPC::SysV qw(IPC_STAT IPC_SET IPC_RMID);
  10  use strict;
  11  use vars qw($VERSION);
  12  use Carp;
  13  
  14  $VERSION = "1.02";
  15  $VERSION = eval $VERSION;
  16  
  17  {
  18      package IPC::Msg::stat;
  19  
  20      use Class::Struct qw(struct);
  21  
  22      struct 'IPC::Msg::stat' => [
  23      uid    => '$',
  24      gid    => '$',
  25      cuid    => '$',
  26      cgid    => '$',
  27      mode    => '$',
  28      qnum    => '$',
  29      qbytes    => '$',
  30      lspid    => '$',
  31      lrpid    => '$',
  32      stime    => '$',
  33      rtime    => '$',
  34      ctime    => '$',
  35      ];
  36  }
  37  
  38  sub new {
  39      @_ == 3 || croak 'new IPC::Msg ( KEY , FLAGS )';
  40      my $class = shift;
  41  
  42      my $id = msgget($_[0],$_[1]);
  43  
  44      defined($id)
  45      ? bless \$id, $class
  46      : undef;
  47  }
  48  
  49  sub id {
  50      my $self = shift;
  51      $$self;
  52  }
  53  
  54  sub stat {
  55      my $self = shift;
  56      my $data = "";
  57      msgctl($$self,IPC_STAT,$data) or
  58      return undef;
  59      IPC::Msg::stat->new->unpack($data);
  60  }
  61  
  62  sub set {
  63      my $self = shift;
  64      my $ds;
  65  
  66      if(@_ == 1) {
  67      $ds = shift;
  68      }
  69      else {
  70      croak 'Bad arg count' if @_ % 2;
  71      my %arg = @_;
  72      $ds = $self->stat
  73          or return undef;
  74      my($key,$val);
  75      $ds->$key($val)
  76          while(($key,$val) = each %arg);
  77      }
  78  
  79      msgctl($$self,IPC_SET,$ds->pack);
  80  }
  81  
  82  sub remove {
  83      my $self = shift;
  84      (msgctl($$self,IPC_RMID,0), undef $$self)[0];
  85  }
  86  
  87  sub rcv {
  88      @_ <= 5 && @_ >= 3 or croak '$msg->rcv( BUF, LEN, TYPE, FLAGS )';
  89      my $self = shift;
  90      my $buf = "";
  91      msgrcv($$self,$buf,$_[1],$_[2] || 0, $_[3] || 0) or
  92      return;
  93      my $type;
  94      ($type,$_[0]) = unpack("l! a*",$buf);
  95      $type;
  96  }
  97  
  98  sub snd {
  99      @_ <= 4 && @_ >= 3 or  croak '$msg->snd( TYPE, BUF, FLAGS )';
 100      my $self = shift;
 101      msgsnd($$self,pack("l! a*",$_[0],$_[1]), $_[2] || 0);
 102  }
 103  
 104  
 105  1;
 106  
 107  __END__
 108  
 109  =head1 NAME
 110  
 111  IPC::Msg - SysV Msg IPC object class
 112  
 113  =head1 SYNOPSIS
 114  
 115      use IPC::SysV qw(IPC_PRIVATE S_IRUSR S_IWUSR);
 116      use IPC::Msg;
 117  
 118      $msg = new IPC::Msg(IPC_PRIVATE, S_IRUSR | S_IWUSR);
 119  
 120      $msg->snd(pack("l! a*",$msgtype,$msg));
 121  
 122      $msg->rcv($buf,256);
 123  
 124      $ds = $msg->stat;
 125  
 126      $msg->remove;
 127  
 128  =head1 DESCRIPTION
 129  
 130  A class providing an object based interface to SysV IPC message queues.
 131  
 132  =head1 METHODS
 133  
 134  =over 4
 135  
 136  =item new ( KEY , FLAGS )
 137  
 138  Creates a new message queue associated with C<KEY>. A new queue is
 139  created if
 140  
 141  =over 4
 142  
 143  =item *
 144  
 145  C<KEY> is equal to C<IPC_PRIVATE>
 146  
 147  =item *
 148  
 149  C<KEY> does not already  have  a  message queue
 150  associated with it, and C<I<FLAGS> & IPC_CREAT> is true.
 151  
 152  =back
 153  
 154  On creation of a new message queue C<FLAGS> is used to set the
 155  permissions.  Be careful not to set any flags that the Sys V
 156  IPC implementation does not allow: in some systems setting
 157  execute bits makes the operations fail.
 158  
 159  =item id
 160  
 161  Returns the system message queue identifier.
 162  
 163  =item rcv ( BUF, LEN [, TYPE [, FLAGS ]] )
 164  
 165  Read a message from the queue. Returns the type of the message read.
 166  See L<msgrcv>.  The  BUF becomes tainted.
 167  
 168  =item remove
 169  
 170  Remove and destroy the message queue from the system.
 171  
 172  =item set ( STAT )
 173  
 174  =item set ( NAME => VALUE [, NAME => VALUE ...] )
 175  
 176  C<set> will set the following values of the C<stat> structure associated
 177  with the message queue.
 178  
 179      uid
 180      gid
 181      mode (oly the permission bits)
 182      qbytes
 183  
 184  C<set> accepts either a stat object, as returned by the C<stat> method,
 185  or a list of I<name>-I<value> pairs.
 186  
 187  =item snd ( TYPE, MSG [, FLAGS ] )
 188  
 189  Place a message on the queue with the data from C<MSG> and with type C<TYPE>.
 190  See L<msgsnd>.
 191  
 192  =item stat
 193  
 194  Returns an object of type C<IPC::Msg::stat> which is a sub-class of
 195  C<Class::Struct>. It provides the following fields. For a description
 196  of these fields see you system documentation.
 197  
 198      uid
 199      gid
 200      cuid
 201      cgid
 202      mode
 203      qnum
 204      qbytes
 205      lspid
 206      lrpid
 207      stime
 208      rtime
 209      ctime
 210  
 211  =back
 212  
 213  =head1 SEE ALSO
 214  
 215  L<IPC::SysV> L<Class::Struct>
 216  
 217  =head1 AUTHOR
 218  
 219  Graham Barr <gbarr@pobox.com>
 220  
 221  =head1 COPYRIGHT
 222  
 223  Copyright (c) 1997 Graham Barr. All rights reserved.
 224  This program is free software; you can redistribute it and/or modify it
 225  under the same terms as Perl itself.
 226  
 227  =cut
 228  


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1