This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
More Fcntl constants. (This process really needs
[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 25=head1 EXPORTED SYMBOLS
26
3e3baf6d
TB
27By default your system's F_* and O_* constants (eg, F_DUPFD and
28O_CREAT) and the FD_CLOEXEC constant are exported into your namespace.
29
30You can request that the flock() constants (LOCK_SH, LOCK_EX, LOCK_NB
31and LOCK_UN) be provided by using the tag C<:flock>. See L<Exporter>.
32
33You can request that the old constants (FAPPEND, FASYNC, FCREAT,
34FDEFER, FEXCL, FNDELAY, FNONBLOCK, FSYNC, FTRUNC) be provided for
35compatibility reasons by using the tag C<:Fcompat>. For new
36applications the newer versions of these constants are suggested
37(O_APPEND, O_ASYNC, O_CREAT, O_DEFER, O_EXCL, O_NDELAY, O_NONBLOCK,
38O_SYNC, O_TRUNC).
7e1af8bc 39
705af498
JH
40Please refer to your native fcntl() and open() documentation to see
41what constants are implemented in your system.
42
3b35bae3
AD
43=cut
44
7e1af8bc 45use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
73c78b0a 46
a0d0e21e 47require Exporter;
a0d0e21e 48require DynaLoader;
fec02dd3 49@ISA = qw(Exporter DynaLoader);
5f832ef3 50$VERSION = "1.03";
a0d0e21e
LW
51# Items to export into callers namespace by default
52# (move infrequently used names to @EXPORT_OK below)
53@EXPORT =
54 qw(
0fd60c2a 55 FD_CLOEXEC
ac88732c
JH
56 F_ALLOCSP
57 F_ALLOCSP64
58 F_COMPAT
59 F_DUP2FD
0fd60c2a
JH
60 F_DUPFD
61 F_EXLCK
ac88732c
JH
62 F_FREESP
63 F_FREESP64
64 F_FSYNC
65 F_FSYNC64
0fd60c2a
JH
66 F_GETFD
67 F_GETFL
68 F_GETLK
5ff3f7a4 69 F_GETLK64
0fd60c2a 70 F_GETOWN
ac88732c 71 F_NODNY
0fd60c2a 72 F_POSIX
ac88732c
JH
73 F_RDACC
74 F_RDDNY
0fd60c2a 75 F_RDLCK
ac88732c
JH
76 F_RWACC
77 F_RWDNY
0fd60c2a
JH
78 F_SETFD
79 F_SETFL
80 F_SETLK
5ff3f7a4 81 F_SETLK64
0fd60c2a 82 F_SETLKW
5ff3f7a4 83 F_SETLKW64
0fd60c2a 84 F_SETOWN
ac88732c 85 F_SHARE
0fd60c2a
JH
86 F_SHLCK
87 F_UNLCK
ac88732c
JH
88 F_UNSHARE
89 F_WRACC
90 F_WRDNY
0fd60c2a
JH
91 F_WRLCK
92 O_ACCMODE
93 O_APPEND
94 O_ASYNC
95 O_BINARY
96 O_CREAT
97 O_DEFER
98 O_DSYNC
99 O_EXCL
100 O_EXLOCK
5ff3f7a4 101 O_LARGEFILE
0fd60c2a
JH
102 O_NDELAY
103 O_NOCTTY
104 O_NONBLOCK
105 O_RDONLY
106 O_RDWR
107 O_RSYNC
108 O_SHLOCK
109 O_SYNC
110 O_TEXT
111 O_TRUNC
112 O_WRONLY
ac88732c
JH
113 SEEK_SET
114 SEEK_CUR
115 SEEK_END
a0d0e21e 116 );
705af498 117
a0d0e21e
LW
118# Other items we are prepared to export if requested
119@EXPORT_OK = qw(
0fd60c2a
JH
120 FAPPEND
121 FASYNC
122 FCREAT
123 FDEFER
ac88732c 124 FDSYNC
0fd60c2a 125 FEXCL
ac88732c 126 FLARGEFILE
0fd60c2a
JH
127 FNDELAY
128 FNONBLOCK
ac88732c 129 FRSYNC
0fd60c2a
JH
130 FSYNC
131 FTRUNC
132 LOCK_EX
133 LOCK_NB
134 LOCK_SH
135 LOCK_UN
7e1af8bc 136);
137# Named groups of exports
138%EXPORT_TAGS = (
3e3baf6d 139 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
ac88732c
JH
140 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
141 FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
a0d0e21e
LW
142);
143
144sub AUTOLOAD {
36c2d165
GS
145 (my $constname = $AUTOLOAD) =~ s/.*:://;
146 my $val = constant($constname, 0);
a0d0e21e 147 if ($! != 0) {
265f5c4a 148 if ($! =~ /Invalid/ || $!{EINVAL}) {
a0d0e21e
LW
149 $AutoLoader::AUTOLOAD = $AUTOLOAD;
150 goto &AutoLoader::AUTOLOAD;
151 }
152 else {
73c78b0a 153 my ($pack,$file,$line) = caller;
a0d0e21e
LW
154 die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
155";
156 }
157 }
36c2d165 158 *$AUTOLOAD = sub { $val };
a0d0e21e
LW
159 goto &$AUTOLOAD;
160}
161
73c78b0a 162bootstrap Fcntl $VERSION;
a0d0e21e 163
a0d0e21e 1641;