—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
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;