Upgrade to Time::HiRes 1.59.
[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
17f410f9 58our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD);
73c78b0a 59
a0d0e21e 60require Exporter;
9426adcd 61use XSLoader ();
62@ISA = qw(Exporter);
4522225b 63$VERSION = "1.05";
a0d0e21e 64# Items to export into callers namespace by default
65# (move infrequently used names to @EXPORT_OK below)
66@EXPORT =
67 qw(
0fd60c2a 68 FD_CLOEXEC
ac88732c 69 F_ALLOCSP
70 F_ALLOCSP64
71 F_COMPAT
72 F_DUP2FD
0fd60c2a 73 F_DUPFD
74 F_EXLCK
ac88732c 75 F_FREESP
76 F_FREESP64
77 F_FSYNC
78 F_FSYNC64
0fd60c2a 79 F_GETFD
80 F_GETFL
81 F_GETLK
5ff3f7a4 82 F_GETLK64
0fd60c2a 83 F_GETOWN
ac88732c 84 F_NODNY
0fd60c2a 85 F_POSIX
ac88732c 86 F_RDACC
87 F_RDDNY
0fd60c2a 88 F_RDLCK
ac88732c 89 F_RWACC
90 F_RWDNY
0fd60c2a 91 F_SETFD
92 F_SETFL
93 F_SETLK
5ff3f7a4 94 F_SETLK64
0fd60c2a 95 F_SETLKW
5ff3f7a4 96 F_SETLKW64
0fd60c2a 97 F_SETOWN
ac88732c 98 F_SHARE
0fd60c2a 99 F_SHLCK
100 F_UNLCK
ac88732c 101 F_UNSHARE
102 F_WRACC
103 F_WRDNY
0fd60c2a 104 F_WRLCK
105 O_ACCMODE
ca6e1c26 106 O_ALIAS
0fd60c2a 107 O_APPEND
108 O_ASYNC
109 O_BINARY
110 O_CREAT
111 O_DEFER
ca6e1c26 112 O_DIRECT
113 O_DIRECTORY
0fd60c2a 114 O_DSYNC
115 O_EXCL
116 O_EXLOCK
5ff3f7a4 117 O_LARGEFILE
0fd60c2a 118 O_NDELAY
119 O_NOCTTY
ca6e1c26 120 O_NOFOLLOW
8c99d73e 121 O_NOINHERIT
0fd60c2a 122 O_NONBLOCK
8c99d73e 123 O_RANDOM
124 O_RAW
0fd60c2a 125 O_RDONLY
126 O_RDWR
ca6e1c26 127 O_RSRC
0fd60c2a 128 O_RSYNC
8c99d73e 129 O_SEQUENTIAL
0fd60c2a 130 O_SHLOCK
131 O_SYNC
ca6e1c26 132 O_TEMPORARY
0fd60c2a 133 O_TEXT
134 O_TRUNC
135 O_WRONLY
a0d0e21e 136 );
705af498 137
a0d0e21e 138# Other items we are prepared to export if requested
139@EXPORT_OK = qw(
5bb8c70c 140 DN_ACCESS
141 DN_ATTRIB
142 DN_CREATE
143 DN_DELETE
144 DN_MODIFY
145 DN_MULTISHOT
146 DN_RENAME
0fd60c2a 147 FAPPEND
148 FASYNC
149 FCREAT
150 FDEFER
ac88732c 151 FDSYNC
0fd60c2a 152 FEXCL
ac88732c 153 FLARGEFILE
0fd60c2a 154 FNDELAY
155 FNONBLOCK
ac88732c 156 FRSYNC
0fd60c2a 157 FSYNC
158 FTRUNC
5bb8c70c 159 F_GETLEASE
160 F_GETSIG
161 F_NOTIFY
162 F_SETLEASE
163 F_SETSIG
0fd60c2a 164 LOCK_EX
5bb8c70c 165 LOCK_MAND
0fd60c2a 166 LOCK_NB
5bb8c70c 167 LOCK_READ
168 LOCK_RW
0fd60c2a 169 LOCK_SH
170 LOCK_UN
5bb8c70c 171 LOCK_WRITE
172 O_IGNORE_CTTY
173 O_NOATIME
174 O_NOLINK
175 O_NOTRANS
176 SEEK_CUR
177 SEEK_END
178 SEEK_SET
ca6e1c26 179 S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
5bb8c70c 180 S_IREAD S_IWRITE S_IEXEC
ca6e1c26 181 S_IRGRP S_IWGRP S_IXGRP S_IRWXG
182 S_IROTH S_IWOTH S_IXOTH S_IRWXO
5bb8c70c 183 S_IRUSR S_IWUSR S_IXUSR S_IRWXU
184 S_ISUID S_ISGID S_ISVTX S_ISTXT
185 _S_IFMT S_IFREG S_IFDIR S_IFLNK
ca6e1c26 186 &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO
187 &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE
7e1af8bc 188);
189# Named groups of exports
190%EXPORT_TAGS = (
3e3baf6d 191 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
ac88732c 192 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
ca6e1c26 193 FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
194 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)],
195 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
196 _S_IFMT S_IFREG S_IFDIR S_IFLNK
197 S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
198 S_IRUSR S_IWUSR S_IXUSR S_IRWXU
199 S_IRGRP S_IWGRP S_IXGRP S_IRWXG
200 S_IROTH S_IWOTH S_IXOTH S_IRWXO
201 S_IREAD S_IWRITE S_IEXEC
0c634585 202 S_ISREG S_ISDIR S_ISLNK S_ISSOCK
203 S_ISBLK S_ISCHR S_ISFIFO
204 S_ISWHT S_ISENFMT
205 S_IFMT S_IMODE
ca6e1c26 206 )],
a0d0e21e 207);
208
0c634585 209sub S_IFMT { @_ ? ( $_[0] & _S_IFMT() ) : _S_IFMT() }
210sub S_IMODE { $_[0] & 07777 }
ca6e1c26 211
0c634585 212sub S_ISREG { ( $_[0] & _S_IFMT() ) == S_IFREG() }
213sub S_ISDIR { ( $_[0] & _S_IFMT() ) == S_IFDIR() }
214sub S_ISLNK { ( $_[0] & _S_IFMT() ) == S_IFLNK() }
215sub S_ISSOCK { ( $_[0] & _S_IFMT() ) == S_IFSOCK() }
216sub S_ISBLK { ( $_[0] & _S_IFMT() ) == S_IFBLK() }
217sub S_ISCHR { ( $_[0] & _S_IFMT() ) == S_IFCHR() }
218sub S_ISFIFO { ( $_[0] & _S_IFMT() ) == S_IFIFO() }
1a16747c 219sub S_ISWHT { ( $_[0] & _S_IFMT() ) == S_IFWHT() }
220sub S_ISENFMT { ( $_[0] & _S_IFMT() ) == S_IFENFMT() }
ca6e1c26 221
a0d0e21e 222sub AUTOLOAD {
36c2d165 223 (my $constname = $AUTOLOAD) =~ s/.*:://;
b903fcff 224 die "&Fcntl::constant not defined" if $constname eq 'constant';
225 my ($error, $val) = constant($constname);
226 if ($error) {
227 my (undef,$file,$line) = caller;
228 die "$error at $file line $line.\n";
a0d0e21e 229 }
0c634585 230 *$AUTOLOAD = sub { $val };
a0d0e21e 231 goto &$AUTOLOAD;
232}
233
9426adcd 234XSLoader::load 'Fcntl', $VERSION;
a0d0e21e 235
a0d0e21e 2361;