This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Quick integration of mainline changes to date
[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;
146174a9
CB
48use XSLoader ();
49@ISA = qw(Exporter);
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
146174a9
CB
113 O_ALIAS
114 O_RSRC
ac88732c
JH
115 SEEK_SET
116 SEEK_CUR
117 SEEK_END
a0d0e21e 118 );
705af498 119
a0d0e21e
LW
120# Other items we are prepared to export if requested
121@EXPORT_OK = qw(
0fd60c2a
JH
122 FAPPEND
123 FASYNC
124 FCREAT
125 FDEFER
ac88732c 126 FDSYNC
0fd60c2a 127 FEXCL
ac88732c 128 FLARGEFILE
0fd60c2a
JH
129 FNDELAY
130 FNONBLOCK
ac88732c 131 FRSYNC
0fd60c2a
JH
132 FSYNC
133 FTRUNC
134 LOCK_EX
135 LOCK_NB
136 LOCK_SH
137 LOCK_UN
7e1af8bc 138);
139# Named groups of exports
140%EXPORT_TAGS = (
3e3baf6d 141 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
ac88732c
JH
142 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
143 FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
a0d0e21e
LW
144);
145
146sub AUTOLOAD {
36c2d165
GS
147 (my $constname = $AUTOLOAD) =~ s/.*:://;
148 my $val = constant($constname, 0);
a0d0e21e 149 if ($! != 0) {
265f5c4a 150 if ($! =~ /Invalid/ || $!{EINVAL}) {
a0d0e21e
LW
151 $AutoLoader::AUTOLOAD = $AUTOLOAD;
152 goto &AutoLoader::AUTOLOAD;
153 }
154 else {
73c78b0a 155 my ($pack,$file,$line) = caller;
a0d0e21e
LW
156 die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
157";
158 }
159 }
36c2d165 160 *$AUTOLOAD = sub { $val };
a0d0e21e
LW
161 goto &$AUTOLOAD;
162}
163
146174a9 164XSLoader::load 'Fcntl', $VERSION;
a0d0e21e 165
a0d0e21e 1661;