This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[inseparable changes from patch from perl5.003_12 to perl5.003_13]
[perl5.git] / ext / Fcntl / Fcntl.pm
CommitLineData
a0d0e21e
LW
1package Fcntl;
2
3b35bae3
AD
3=head1 NAME
4
5Fcntl - load the C Fcntl.h defines
6
7=head1 SYNOPSIS
8
9 use Fcntl;
7e1af8bc 10 use Fcntl qw(:DEFAULT :flock);
3b35bae3
AD
11
12=head1 DESCRIPTION
13
14This module is just a translation of the C F<fnctl.h> file.
15Unlike the old mechanism of requiring a translated F<fnctl.ph>
16file, this uses the B<h2xs> program (see the Perl source distribution)
17and your native C compiler. This means that it has a
18far more likely chance of getting the numbers right.
19
20=head1 NOTE
21
22Only C<#define> symbols get translated; you must still correctly
23pack up your own arguments to pass as args for locking functions, etc.
24
7e1af8bc
PP
25=head1 EXPORTED SYMBOLS
26
27By default your system's F_* and O_* constants (eg, F_DUPFD and O_CREAT)
28are exported into your namespace. You can request that the flock()
29constants (LOCK_SH, LOCK_EX, LOCK_NB and LOCK_UN) be provided by using
30the tag C<:flock>. See L<Exporter>.
31
3b35bae3
AD
32=cut
33
7e1af8bc 34use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
73c78b0a 35
a0d0e21e 36require Exporter;
a0d0e21e 37require DynaLoader;
fec02dd3 38@ISA = qw(Exporter DynaLoader);
7e1af8bc 39$VERSION = "1.01";
a0d0e21e
LW
40# Items to export into callers namespace by default
41# (move infrequently used names to @EXPORT_OK below)
42@EXPORT =
43 qw(
44 F_DUPFD F_GETFD F_GETLK F_SETFD F_GETFL F_SETFL F_SETLK F_SETLKW
45 FD_CLOEXEC F_RDLCK F_UNLCK F_WRLCK
46 O_CREAT O_EXCL O_NOCTTY O_TRUNC
47 O_APPEND O_NONBLOCK
48 O_NDELAY
49 O_RDONLY O_RDWR O_WRONLY
50 );
51# Other items we are prepared to export if requested
52@EXPORT_OK = qw(
7e1af8bc
PP
53 LOCK_SH LOCK_EX LOCK_NB LOCK_UN
54);
55# Named groups of exports
56%EXPORT_TAGS = (
57 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
a0d0e21e
LW
58);
59
60sub AUTOLOAD {
73c78b0a 61 my($constname);
a0d0e21e 62 ($constname = $AUTOLOAD) =~ s/.*:://;
73c78b0a 63 my $val = constant($constname, @_ ? $_[0] : 0);
a0d0e21e
LW
64 if ($! != 0) {
65 if ($! =~ /Invalid/) {
66 $AutoLoader::AUTOLOAD = $AUTOLOAD;
67 goto &AutoLoader::AUTOLOAD;
68 }
69 else {
73c78b0a 70 my ($pack,$file,$line) = caller;
a0d0e21e
LW
71 die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
72";
73 }
74 }
75 eval "sub $AUTOLOAD { $val }";
76 goto &$AUTOLOAD;
77}
78
73c78b0a 79bootstrap Fcntl $VERSION;
a0d0e21e 80
a0d0e21e 811;