⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msg.pm

📁 UNIX下perl实现代码
💻 PM
字号:
# IPC::Msg.pm## Copyright (c) 1997 Graham Barr <gbarr@pobox.com>. All rights reserved.# This program is free software; you can redistribute it and/or# modify it under the same terms as Perl itself.package IPC::Msg;use IPC::SysV qw(IPC_STAT IPC_SET IPC_RMID);use strict;use vars qw($VERSION);use Carp;$VERSION = "1.00";{    package IPC::Msg::stat;    use Class::Struct qw(struct);    struct 'IPC::Msg::stat' => [	uid	=> '$',	gid	=> '$',	cuid	=> '$',	cgid	=> '$',	mode	=> '$',	qnum	=> '$',	qbytes	=> '$',	lspid	=> '$',	lrpid	=> '$',	stime	=> '$',	rtime	=> '$',	ctime	=> '$',    ];}sub new {    @_ == 3 || croak 'new IPC::Msg ( KEY , FLAGS )';    my $class = shift;    my $id = msgget($_[0],$_[1]);    defined($id)	? bless \$id, $class	: undef;}sub id {    my $self = shift;    $$self;}sub stat {    my $self = shift;    my $data = "";    msgctl($$self,IPC_STAT,$data) or	return undef;    IPC::Msg::stat->new->unpack($data);}sub set {    my $self = shift;    my $ds;    if(@_ == 1) {	$ds = shift;    }    else {	croak 'Bad arg count' if @_ % 2;	my %arg = @_;	my $ds = $self->stat		or return undef;	my($key,$val);	$ds->$key($val)	    while(($key,$val) = each %arg);    }    msgctl($$self,IPC_SET,$ds->pack);}sub remove {    my $self = shift;    (msgctl($$self,IPC_RMID,0), undef $$self)[0];}sub rcv {    @_ <= 5 && @_ >= 3 or croak '$msg->rcv( BUF, LEN, TYPE, FLAGS )';    my $self = shift;    my $buf = "";    msgrcv($$self,$buf,$_[1],$_[2] || 0, $_[3] || 0) or	return;    my $type;    ($type,$_[0]) = unpack("l! a*",$buf);    $type;}sub snd {    @_ <= 4 && @_ >= 3 or  croak '$msg->snd( TYPE, BUF, FLAGS )';    my $self = shift;    msgsnd($$self,pack("l! a*",$_[0],$_[1]), $_[2] || 0);}1;__END__=head1 NAMEIPC::Msg - SysV Msg IPC object class=head1 SYNOPSIS    use IPC::SysV qw(IPC_PRIVATE S_IRWXU);    use IPC::Msg;    $msg = new IPC::Msg(IPC_PRIVATE, S_IRWXU);    $msg->snd(pack("l! a*",$msgtype,$msg));    $msg->rcv($buf,256);    $ds = $msg->stat;    $msg->remove;=head1 DESCRIPTION=head1 METHODS=over 4=item new ( KEY , FLAGS )Creates a new message queue associated with C<KEY>. A new queue iscreated if=over 4=item *C<KEY> is equal to C<IPC_PRIVATE>=item *C<KEY> does not already  have  a  message queueassociated with it, and C<I<FLAGS> & IPC_CREAT> is true.=backOn creation of a new message queue C<FLAGS> is used to set thepermissions.=item idReturns the system message queue identifier.=item rcv ( BUF, LEN [, TYPE [, FLAGS ]] )Read a message from the queue. Returns the type of the message read.See L<msgrcv>.  The  BUF becomes tainted.=item removeRemove and destroy the message queue from the system.=item set ( STAT )=item set ( NAME => VALUE [, NAME => VALUE ...] )C<set> will set the following values of the C<stat> structure associatedwith the message queue.    uid    gid    mode (oly the permission bits)    qbytesC<set> accepts either a stat object, as returned by the C<stat> method,or a list of I<name>-I<value> pairs.=item snd ( TYPE, MSG [, FLAGS ] )Place a message on the queue with the data from C<MSG> and with type C<TYPE>.See L<msgsnd>.=item statReturns an object of type C<IPC::Msg::stat> which is a sub-class ofC<Class::Struct>. It provides the following fields. For a descriptionof these fields see you system documentation.    uid    gid    cuid    cgid    mode    qnum    qbytes    lspid    lrpid    stime    rtime    ctime=back=head1 SEE ALSOL<IPC::SysV> L<Class::Struct>=head1 AUTHORGraham Barr <gbarr@pobox.com>=head1 COPYRIGHTCopyright (c) 1997 Graham Barr. All rights reserved.This program is free software; you can redistribute it and/or modify itunder the same terms as Perl itself.=cut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -