POSIX::1003::Fcntl - POSIX function fcntl
use POSIX::1003::Fcntl;
One function, which hides many tricks with file-descriptors. This module tries to provide functions which separates the various uses.
See perlfunc fcntl. This raw call to fcntl() is only in some cases simple, but often isn't.
perlfunc fcntl
fcntl()
Not standard POSIX, but available on many POSIX platforms. Often implemented as fcntl(), which is more complex to use. On other platforms implemented as separate OS feature.
Perl core provides a flock which may hide plaform differences. This flockfd is the pure version. Try to use setfd_lock(), which is more portable and flexible.
flock
flockfd
example:
use POSIX::1003::Fcntl ':flock'; if(flockfd $fd, LOCK_EX|LOCK_NB) ... flockfd $fd, LOCK_UN;
Not standard POSIX, but available on many POSIX platforms. Often implemented via fcntl(), which is more complex to use.
use POSIX::1003::Fcntl ':lockfd'; if(lockf $fd, F_LOCK) ... lockf $fd, F_ULOCK;
Functions F_DUPFD and F_DUPFD_CLOEXEC: dupplicate a file-descriptor to the lowest free fd number.
-Option --Default close_on_exec <false>
my $dup_fd = fcntl_dup \*STDOUT; my $dup_fd = fcntl_dup 2, close_on_exec => 1;
Control the file descriptor flags, function F_GETFD.
Get the file status flags and access modes, function F_GETFL.
my $flags = getfd_flags(fd); if ((flags & O_ACCMODE) == O_RDWR)
Function F_GETLCK. Returns the first lock which would prevent getting the lock. The OPTIONS are the same as for setfd_lock().
if(my $lock = getfd_islocked \*IN) ...
Function F_GETLEASE.
my $lease = getfd_lease(\*STDIN) or die $!; if($lease != F_RDLCK) ...
Function F_GETOWN or F_GETOWN_EX.
my ($type, $pid) = getfd_owner($fd); defined $type or die $!; if($type==F_OWNER_PGRP) ... my $pid = getfd_owner($fd) or die $!;
Function F_GETPIPE_SZ.
my $size = getfd_pipe_size($pipe) or die $!;
Function F_GETSIG.
my $signal = getfd_signal(\*STDOUT) or die $!;
Change the file descriptor flags, function F_SETFD.
Change the file status flags and access modes, function F_SETFL.
Function F_SETLEASE.
setfd_lease(\*STDOUT, F_WRLCK) or die $!;
Functions F_SETLK and F_SETLKW: request a lock for (a section of) a file.
-Option--Default len <until end of file> start 0 type F_RDLCK wait <false> whence SEEK_SET
setfd_lock \*IN, type => F_WRLCK, wait => 1 or die "cannot lock IN: $!\n";
Function F_NOTIFY.
my $d = openfd('/etc', O_RDONLY|O_DIRECTORY) or die $!; setfd_notify($d, DN_ACCESS|DN_CREATE|DN_MULTISHOT) or die $!;
Function F_GETOWN or F_GETOWN_EX. The _EX version is attempted if provided.
-Option--Default type <looks at sign>
setfd_owner($fh, $pid) or die $!; setfd_owner($fh, $pid, type => F_OWNER_TID) or die $!; setfd_owner($fh, -9); # $pid=9, type=F_OWNER_PGRP
Function F_SETPIPE_SZ.
setfd_pipe_size($pipe, 16384) or die $!;
Function F_SETSIG.
setfd_signal(\*STDOUT, SIGINT) or die $!;
The following constants are exported, shown here with the values discovered during installation of this module.
DN_ACCESS 1 F_SETFL 4 DN_ATTRIB 32 F_SETLEASE 1024 DN_CREATE 4 F_SETLKW 7 DN_DELETE 8 F_SETOWN 8 DN_MODIFY 2 F_SETOWN_EX 15 DN_MULTISHOT 2147483648 F_SETPIPE_SZ 1031 DN_RENAME 16 F_SETSIG 10 F_DUPFD 0 F_TEST 3 F_DUPFD_CLOEXEC 1030 F_TLOCK 2 F_GETFD 1 F_ULOCK 0 F_GETFL 3 F_UNLCK 2 F_GETLEASE 1025 F_WRLCK 1 F_GETLK 5 FAPPEND undef F_GETOWN 9 FASYNC undef F_GETOWN_EX 16 FD_CLOEXEC 1 F_GETPIPE_SZ 1032 FNDELAY undef F_GETSIG 11 FNONBLOCK undef F_LOCK 1 LOCK_EX undef F_NOTIFY 1026 LOCK_NB undef F_RDLCK 0 LOCK_SH undef F_SETFD 2 LOCK_UN undef
This module is part of POSIX-1003 distribution version 0.95.1, built on August 26, 2013. Website: http://perl.overmeer.net. The code is based on POSIX, which is released with Perl itself. See also POSIX::Util for additional functionality.
Copyrights 2011-2013 on the perl code and the related documentation by [Mark Overmeer]. For other contributors see ChangeLog.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html
To install POSIX::1003, copy and paste the appropriate command in to your terminal.
cpanm
cpanm POSIX::1003
CPAN shell
perl -MCPAN -e shell install POSIX::1003
For more information on module installation, please visit the detailed CPAN module installation guide.