IO::File::fcntl - extension of IO::File for fcntl


IO-File-Lockable documentation Contained in the IO-File-Lockable distribution.

Index


Code Index:

NAME

Top

IO::File::fcntl - extension of IO::File for fcntl

SYNOPSIS

Top

    use IO::File::fcntl;

    my $fh = new IO::File::fcntl($filename);     # auto lock_(ex|sh)
    my $fh = new IO::File::fcntl($filename,'<'); # auto lock_ex
    my $fh = new IO::File::fcntl($filename,'>','lock_sh');
    my $fh = new IO::File::fcntl($filename,'<','lock_ex',60);
    etc,etc....

DESCRIPTION

Top

IO::File::fcntl inherits from IO::File::Lockable.

CONSTRUCTOR

Top

new (FILENAME [,MODE [,LOCK_MODE [,TIMEOUT]]]);

creates a IO::File::fcntl.

METHODS

Top

$fh->open(FILENAME [,MODE [,LOCK_METHOD [,TIMEOUT]]]);
$fh->fcntl(LOCK_MODE,[TIMEOUT]);
$fh->lock_ex([TIMEOUT]);
$fh->lock_sh([TIMEOUT]);
$fh->lock_un([TIMEOUT]);
$fh->fcntl_ex([TIMEOUT]);
$fh->fcntl_sh([TIMEOUT]);
$fh->fcntl_un([TIMEOUT]);

AUTHOR

Top

Shin Honda (makoto[at]cpan.org,makoto[at]cpan.jp)

copyright

Top

SEE ALSO

Top

Fcntl, IO::File, IO::File::Lockable IO::File::flock


IO-File-Lockable documentation Contained in the IO-File-Lockable distribution.

package IO::File::fcntl;
use strict;
use base qw(IO::File::Lockable);
use vars qw($VERSION);
use Fcntl;
$VERSION		= '0.31';
######################################################################
sub DESTROY :method {shift->fcntl_un}
sub fcntl_	:method {CORE::fcntl($_[0],$_[1],$_[2])}
##### override
sub lock_ex	:method {shift->fcntl_ex(@_)}
sub lock_sh	:method {shift->fcntl_sh(@_)}
sub lock_un	:method {shift->fcntl_un(@_)}
##### fcntl oop i/f
sub fcntl		:method {
	my $fh		= shift;
	my $lock	= shift;
	my $timeout = shift || 0;
	return $fh	unless($fh->opened);
	return $fh->set_timeout(
		$timeout => sub {fcntl_($fh,F_SETLKW,pack('ssx32',$lock,0));$fh}
	);
}
sub fcntl_sh :method {shift->fcntl(F_RDLCK,@_)}
sub fcntl_ex :method {shift->fcntl(F_WRLCK,@_)}
sub fcntl_un :method {shift->fcntl(F_UNLCK,@_)}
1;
__END__