IO::Compress::* 2.011
[p5sagit/p5-mst-13.2.git] / ext / Fcntl / Fcntl.pm
CommitLineData
a0d0e21e 1package Fcntl;
2
3b35bae3 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 11
12=head1 DESCRIPTION
13
554ad1fc 14This module is just a translation of the C F<fcntl.h> file.
15Unlike the old mechanism of requiring a translated F<fcntl.ph>
3b35bae3 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 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
ca6e1c26 40For ease of use also the SEEK_* constants (for seek() and sysseek(),
41e.g. SEEK_END) and the S_I* constants (for chmod() and stat()) are
42available for import. They can be imported either separately or using
43the tags C<:seek> and C<:mode>.
44
45Please refer to your native fcntl(2), open(2), fseek(3), lseek(2)
46(equal to Perl's seek() and sysseek(), respectively), and chmod(2)
47documentation to see what constants are implemented in your system.
48
49See L<perlopentut> to learn about the uses of the O_* constants
50with sysopen().
51
52See L<perlfunc/seek> and L<perlfunc/sysseek> about the SEEK_* constants.
53
54See L<perlfunc/stat> about the S_I* constants.
705af498 55
3b35bae3 56=cut
57
0f680395 58use strict;
17f410f9 59our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD);
73c78b0a 60
a0d0e21e 61require Exporter;
9426adcd 62use XSLoader ();
63@ISA = qw(Exporter);
0e6f150f 64BEGIN {
0f680395 65 $VERSION = "1.06";
0e6f150f 66}
67
a0d0e21e 68# Items to export into callers namespace by default
69# (move infrequently used names to @EXPORT_OK below)
70@EXPORT =
71 qw(
0fd60c2a 72 FD_CLOEXEC
ac88732c 73 F_ALLOCSP
74 F_ALLOCSP64
75 F_COMPAT
76 F_DUP2FD
0fd60c2a 77 F_DUPFD
78 F_EXLCK
ac88732c 79 F_FREESP
80 F_FREESP64
81 F_FSYNC
82 F_FSYNC64
0fd60c2a 83 F_GETFD
84 F_GETFL
85 F_GETLK
5ff3f7a4 86 F_GETLK64
0fd60c2a 87 F_GETOWN
ac88732c 88 F_NODNY
0fd60c2a 89 F_POSIX
ac88732c 90 F_RDACC
91 F_RDDNY
0fd60c2a 92 F_RDLCK
ac88732c 93 F_RWACC
94 F_RWDNY
0fd60c2a 95 F_SETFD
96 F_SETFL
97 F_SETLK
5ff3f7a4 98 F_SETLK64
0fd60c2a 99 F_SETLKW
5ff3f7a4 100 F_SETLKW64
0fd60c2a 101 F_SETOWN
ac88732c 102 F_SHARE
0fd60c2a 103 F_SHLCK
104 F_UNLCK
ac88732c 105 F_UNSHARE
106 F_WRACC
107 F_WRDNY
0fd60c2a 108 F_WRLCK
109 O_ACCMODE
ca6e1c26 110 O_ALIAS
0fd60c2a 111 O_APPEND
112 O_ASYNC
113 O_BINARY
114 O_CREAT
115 O_DEFER
ca6e1c26 116 O_DIRECT
117 O_DIRECTORY
0fd60c2a 118 O_DSYNC
119 O_EXCL
120 O_EXLOCK
5ff3f7a4 121 O_LARGEFILE
0fd60c2a 122 O_NDELAY
123 O_NOCTTY
ca6e1c26 124 O_NOFOLLOW
8c99d73e 125 O_NOINHERIT
0fd60c2a 126 O_NONBLOCK
8c99d73e 127 O_RANDOM
128 O_RAW
0fd60c2a 129 O_RDONLY
130 O_RDWR
ca6e1c26 131 O_RSRC
0fd60c2a 132 O_RSYNC
8c99d73e 133 O_SEQUENTIAL
0fd60c2a 134 O_SHLOCK
135 O_SYNC
ca6e1c26 136 O_TEMPORARY
0fd60c2a 137 O_TEXT
138 O_TRUNC
139 O_WRONLY
a0d0e21e 140 );
705af498 141
a0d0e21e 142# Other items we are prepared to export if requested
143@EXPORT_OK = qw(
5bb8c70c 144 DN_ACCESS
145 DN_ATTRIB
146 DN_CREATE
147 DN_DELETE
148 DN_MODIFY
149 DN_MULTISHOT
150 DN_RENAME
0fd60c2a 151 FAPPEND
152 FASYNC
153 FCREAT
154 FDEFER
ac88732c 155 FDSYNC
0fd60c2a 156 FEXCL
ac88732c 157 FLARGEFILE
0fd60c2a 158 FNDELAY
159 FNONBLOCK
ac88732c 160 FRSYNC
0fd60c2a 161 FSYNC
162 FTRUNC
5bb8c70c 163 F_GETLEASE
164 F_GETSIG
165 F_NOTIFY
166 F_SETLEASE
167 F_SETSIG
0fd60c2a 168 LOCK_EX
5bb8c70c 169 LOCK_MAND
0fd60c2a 170 LOCK_NB
5bb8c70c 171 LOCK_READ
172 LOCK_RW
0fd60c2a 173 LOCK_SH
174 LOCK_UN
5bb8c70c 175 LOCK_WRITE
176 O_IGNORE_CTTY
177 O_NOATIME
178 O_NOLINK
179 O_NOTRANS
180 SEEK_CUR
181 SEEK_END
182 SEEK_SET
ca6e1c26 183 S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
5bb8c70c 184 S_IREAD S_IWRITE S_IEXEC
ca6e1c26 185 S_IRGRP S_IWGRP S_IXGRP S_IRWXG
186 S_IROTH S_IWOTH S_IXOTH S_IRWXO
5bb8c70c 187 S_IRUSR S_IWUSR S_IXUSR S_IRWXU
188 S_ISUID S_ISGID S_ISVTX S_ISTXT
189 _S_IFMT S_IFREG S_IFDIR S_IFLNK
ca6e1c26 190 &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO
191 &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE
7e1af8bc 192);
193# Named groups of exports
194%EXPORT_TAGS = (
3e3baf6d 195 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
ac88732c 196 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
ca6e1c26 197 FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
198 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)],
199 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
200 _S_IFMT S_IFREG S_IFDIR S_IFLNK
201 S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
202 S_IRUSR S_IWUSR S_IXUSR S_IRWXU
203 S_IRGRP S_IWGRP S_IXGRP S_IRWXG
204 S_IROTH S_IWOTH S_IXOTH S_IRWXO
205 S_IREAD S_IWRITE S_IEXEC
0c634585 206 S_ISREG S_ISDIR S_ISLNK S_ISSOCK
207 S_ISBLK S_ISCHR S_ISFIFO
208 S_ISWHT S_ISENFMT
209 S_IFMT S_IMODE
ca6e1c26 210 )],
a0d0e21e 211);
212
0e6f150f 213# Force the constants to become inlined
214BEGIN {
215 XSLoader::load 'Fcntl', $VERSION;
216}
217
0f680395 218sub S_IFMT { @_ ? ( $_[0] & _S_IFMT() ) : _S_IFMT() }
0c634585 219sub S_IMODE { $_[0] & 07777 }
ca6e1c26 220
0f680395 221sub S_ISREG { ( $_[0] & _S_IFMT() ) == S_IFREG() }
222sub S_ISDIR { ( $_[0] & _S_IFMT() ) == S_IFDIR() }
223sub S_ISLNK { ( $_[0] & _S_IFMT() ) == S_IFLNK() }
224sub S_ISSOCK { ( $_[0] & _S_IFMT() ) == S_IFSOCK() }
225sub S_ISBLK { ( $_[0] & _S_IFMT() ) == S_IFBLK() }
226sub S_ISCHR { ( $_[0] & _S_IFMT() ) == S_IFCHR() }
227sub S_ISFIFO { ( $_[0] & _S_IFMT() ) == S_IFIFO() }
228sub S_ISWHT { ( $_[0] & _S_IFMT() ) == S_IFWHT() }
229sub S_ISENFMT { ( $_[0] & _S_IFMT() ) == S_IFENFMT() }
ca6e1c26 230
a0d0e21e 231sub AUTOLOAD {
36c2d165 232 (my $constname = $AUTOLOAD) =~ s/.*:://;
b903fcff 233 die "&Fcntl::constant not defined" if $constname eq 'constant';
234 my ($error, $val) = constant($constname);
235 if ($error) {
236 my (undef,$file,$line) = caller;
237 die "$error at $file line $line.\n";
a0d0e21e 238 }
0f680395 239 no strict 'refs';
0c634585 240 *$AUTOLOAD = sub { $val };
a0d0e21e 241 goto &$AUTOLOAD;
242}
243
a0d0e21e 2441;