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
1 package Fcntl;
2
3 =head1 NAME
4
5 Fcntl - load the C Fcntl.h defines
6
7 =head1 SYNOPSIS
8
9     use Fcntl;
10     use Fcntl qw(:DEFAULT :flock);
11
12 =head1 DESCRIPTION
13
14 This module is just a translation of the C F<fnctl.h> file.
15 Unlike the old mechanism of requiring a translated F<fnctl.ph>
16 file, this uses the B<h2xs> program (see the Perl source distribution)
17 and your native C compiler.  This means that it has a 
18 far more likely chance of getting the numbers right.
19
20 =head1 NOTE
21
22 Only C<#define> symbols get translated; you must still correctly
23 pack up your own arguments to pass as args for locking functions, etc.
24
25 =head1 EXPORTED SYMBOLS
26
27 By default your system's F_* and O_* constants (eg, F_DUPFD and
28 O_CREAT) and the FD_CLOEXEC constant are exported into your namespace.
29
30 You can request that the flock() constants (LOCK_SH, LOCK_EX, LOCK_NB
31 and LOCK_UN) be provided by using the tag C<:flock>.  See L<Exporter>.
32
33 You can request that the old constants (FAPPEND, FASYNC, FCREAT,
34 FDEFER, FEXCL, FNDELAY, FNONBLOCK, FSYNC, FTRUNC) be provided for
35 compatibility reasons by using the tag C<:Fcompat>.  For new
36 applications the newer versions of these constants are suggested
37 (O_APPEND, O_ASYNC, O_CREAT, O_DEFER, O_EXCL, O_NDELAY, O_NONBLOCK,
38 O_SYNC, O_TRUNC).
39
40 Please refer to your native fcntl() and open() documentation to see
41 what constants are implemented in your system.
42
43 =cut
44
45 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
46
47 require Exporter;
48 require DynaLoader;
49 @ISA = qw(Exporter DynaLoader);
50 $VERSION = "1.03";
51 # Items to export into callers namespace by default
52 # (move infrequently used names to @EXPORT_OK below)
53 @EXPORT =
54   qw(
55         FD_CLOEXEC
56         F_DUPFD
57         F_EXLCK
58         F_GETFD
59         F_GETFL
60         F_GETLK
61         F_GETLK64
62         F_GETOWN
63         F_POSIX
64         F_RDLCK
65         F_SETFD
66         F_SETFL
67         F_SETLK
68         F_SETLK64
69         F_SETLKW
70         F_SETLKW64
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
84         O_LARGEFILE
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
96      );
97
98 # Other items we are prepared to export if requested
99 @EXPORT_OK = qw(
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
113 );
114 # Named groups of exports
115 %EXPORT_TAGS = (
116     'flock'   => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
117     'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FEXCL
118                      FNDELAY FNONBLOCK FSYNC FTRUNC)],
119 );
120
121 sub AUTOLOAD {
122     (my $constname = $AUTOLOAD) =~ s/.*:://;
123     my $val = constant($constname, 0);
124     if ($! != 0) {
125         if ($! =~ /Invalid/) {
126             $AutoLoader::AUTOLOAD = $AUTOLOAD;
127             goto &AutoLoader::AUTOLOAD;
128         }
129         else {
130             my ($pack,$file,$line) = caller;
131             die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
132 ";
133         }
134     }
135     *$AUTOLOAD = sub { $val };
136     goto &$AUTOLOAD;
137 }
138
139 bootstrap Fcntl $VERSION;
140
141 1;