mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
2.8 KiB
137 lines
2.8 KiB
package Fcntl;
|
|
|
|
=head1 NAME
|
|
|
|
Fcntl - load the C Fcntl.h defines
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
use Fcntl;
|
|
use Fcntl qw(:DEFAULT :flock);
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This module is just a translation of the C F<fnctl.h> file.
|
|
Unlike the old mechanism of requiring a translated F<fnctl.ph>
|
|
file, this uses the B<h2xs> program (see the Perl source distribution)
|
|
and your native C compiler. This means that it has a
|
|
far more likely chance of getting the numbers right.
|
|
|
|
=head1 NOTE
|
|
|
|
Only C<#define> symbols get translated; you must still correctly
|
|
pack up your own arguments to pass as args for locking functions, etc.
|
|
|
|
=head1 EXPORTED SYMBOLS
|
|
|
|
By default your system's F_* and O_* constants (eg, F_DUPFD and
|
|
O_CREAT) and the FD_CLOEXEC constant are exported into your namespace.
|
|
|
|
You can request that the flock() constants (LOCK_SH, LOCK_EX, LOCK_NB
|
|
and LOCK_UN) be provided by using the tag C<:flock>. See L<Exporter>.
|
|
|
|
You can request that the old constants (FAPPEND, FASYNC, FCREAT,
|
|
FDEFER, FEXCL, FNDELAY, FNONBLOCK, FSYNC, FTRUNC) be provided for
|
|
compatibility reasons by using the tag C<:Fcompat>. For new
|
|
applications the newer versions of these constants are suggested
|
|
(O_APPEND, O_ASYNC, O_CREAT, O_DEFER, O_EXCL, O_NDELAY, O_NONBLOCK,
|
|
O_SYNC, O_TRUNC).
|
|
|
|
Please refer to your native fcntl() and open() documentation to see
|
|
what constants are implemented in your system.
|
|
|
|
=cut
|
|
|
|
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
|
|
|
|
require Exporter;
|
|
require DynaLoader;
|
|
@ISA = qw(Exporter DynaLoader);
|
|
$VERSION = "1.03";
|
|
# Items to export into callers namespace by default
|
|
# (move infrequently used names to @EXPORT_OK below)
|
|
@EXPORT =
|
|
qw(
|
|
FD_CLOEXEC
|
|
F_DUPFD
|
|
F_EXLCK
|
|
F_GETFD
|
|
F_GETFL
|
|
F_GETLK
|
|
F_GETOWN
|
|
F_POSIX
|
|
F_RDLCK
|
|
F_SETFD
|
|
F_SETFL
|
|
F_SETLK
|
|
F_SETLKW
|
|
F_SETOWN
|
|
F_SHLCK
|
|
F_UNLCK
|
|
F_WRLCK
|
|
O_ACCMODE
|
|
O_APPEND
|
|
O_ASYNC
|
|
O_BINARY
|
|
O_CREAT
|
|
O_DEFER
|
|
O_DSYNC
|
|
O_EXCL
|
|
O_EXLOCK
|
|
O_NDELAY
|
|
O_NOCTTY
|
|
O_NONBLOCK
|
|
O_RDONLY
|
|
O_RDWR
|
|
O_RSYNC
|
|
O_SHLOCK
|
|
O_SYNC
|
|
O_TEXT
|
|
O_TRUNC
|
|
O_WRONLY
|
|
);
|
|
|
|
# Other items we are prepared to export if requested
|
|
@EXPORT_OK = qw(
|
|
FAPPEND
|
|
FASYNC
|
|
FCREAT
|
|
FDEFER
|
|
FEXCL
|
|
FNDELAY
|
|
FNONBLOCK
|
|
FSYNC
|
|
FTRUNC
|
|
LOCK_EX
|
|
LOCK_NB
|
|
LOCK_SH
|
|
LOCK_UN
|
|
);
|
|
# Named groups of exports
|
|
%EXPORT_TAGS = (
|
|
'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
|
|
'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FEXCL
|
|
FNDELAY FNONBLOCK FSYNC FTRUNC)],
|
|
);
|
|
|
|
sub AUTOLOAD {
|
|
(my $constname = $AUTOLOAD) =~ s/.*:://;
|
|
my $val = constant($constname, 0);
|
|
if ($! != 0) {
|
|
if ($! =~ /Invalid/) {
|
|
$AutoLoader::AUTOLOAD = $AUTOLOAD;
|
|
goto &AutoLoader::AUTOLOAD;
|
|
}
|
|
else {
|
|
my ($pack,$file,$line) = caller;
|
|
die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
|
|
";
|
|
}
|
|
}
|
|
*$AUTOLOAD = sub { $val };
|
|
goto &$AUTOLOAD;
|
|
}
|
|
|
|
bootstrap Fcntl $VERSION;
|
|
|
|
1;
|