This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate with Sarathy. perldiag.pod required manual editing.
[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
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
JH
55 FD_CLOEXEC
56 F_DUPFD
57 F_EXLCK
58 F_GETFD
59 F_GETFL
60 F_GETLK
5ff3f7a4 61 F_GETLK64
0fd60c2a
JH
62 F_GETOWN
63 F_POSIX
64 F_RDLCK
65 F_SETFD
66 F_SETFL
67 F_SETLK
5ff3f7a4 68 F_SETLK64
0fd60c2a 69 F_SETLKW
5ff3f7a4 70 F_SETLKW64
0fd60c2a
JH
71 F_SETOWN
72 F_SHLCK
73 F_UNLCK
74 F_WRLCK
75 O_ACCMODE
76 O_APPEND
77 O_ASYNC
78 O_BINARY
79 O_CREAT
80 O_DEFER
81 O_DSYNC
82 O_EXCL
83 O_EXLOCK
5ff3f7a4 84 O_LARGEFILE
0fd60c2a
JH
85 O_NDELAY
86 O_NOCTTY
87 O_NONBLOCK
88 O_RDONLY
89 O_RDWR
90 O_RSYNC
91 O_SHLOCK
92 O_SYNC
93 O_TEXT
94 O_TRUNC
95 O_WRONLY
a0d0e21e 96 );
705af498 97
a0d0e21e
LW
98# Other items we are prepared to export if requested
99@EXPORT_OK = qw(
0fd60c2a
JH
100 FAPPEND
101 FASYNC
102 FCREAT
103 FDEFER
104 FEXCL
105 FNDELAY
106 FNONBLOCK
107 FSYNC
108 FTRUNC
109 LOCK_EX
110 LOCK_NB
111 LOCK_SH
112 LOCK_UN
7e1af8bc
PP
113);
114# Named groups of exports
115%EXPORT_TAGS = (
3e3baf6d
TB
116 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
117 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FEXCL
0fd60c2a 118 FNDELAY FNONBLOCK FSYNC FTRUNC)],
a0d0e21e
LW
119);
120
121sub AUTOLOAD {
36c2d165
GS
122 (my $constname = $AUTOLOAD) =~ s/.*:://;
123 my $val = constant($constname, 0);
a0d0e21e
LW
124 if ($! != 0) {
125 if ($! =~ /Invalid/) {
126 $AutoLoader::AUTOLOAD = $AUTOLOAD;
127 goto &AutoLoader::AUTOLOAD;
128 }
129 else {
73c78b0a 130 my ($pack,$file,$line) = caller;
a0d0e21e
LW
131 die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
132";
133 }
134 }
36c2d165 135 *$AUTOLOAD = sub { $val };
a0d0e21e
LW
136 goto &$AUTOLOAD;
137}
138
73c78b0a 139bootstrap Fcntl $VERSION;
a0d0e21e 140
a0d0e21e 1411;