This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fcntl: more O_ constants, move SEEK_ to @EXPORT_OK
[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
ca6e1c26
JH
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
AD
56=cut
57
17f410f9 58our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD);
73c78b0a 59
a0d0e21e 60require Exporter;
9426adcd
IZ
61use XSLoader ();
62@ISA = qw(Exporter);
5f832ef3 63$VERSION = "1.03";
a0d0e21e
LW
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
JH
69 F_ALLOCSP
70 F_ALLOCSP64
71 F_COMPAT
72 F_DUP2FD
0fd60c2a
JH
73 F_DUPFD
74 F_EXLCK
ac88732c
JH
75 F_FREESP
76 F_FREESP64
77 F_FSYNC
78 F_FSYNC64
0fd60c2a
JH
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
JH
86 F_RDACC
87 F_RDDNY
0fd60c2a 88 F_RDLCK
ac88732c
JH
89 F_RWACC
90 F_RWDNY
0fd60c2a
JH
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
JH
99 F_SHLCK
100 F_UNLCK
ac88732c
JH
101 F_UNSHARE
102 F_WRACC
103 F_WRDNY
0fd60c2a
JH
104 F_WRLCK
105 O_ACCMODE
ca6e1c26 106 O_ALIAS
0fd60c2a
JH
107 O_APPEND
108 O_ASYNC
109 O_BINARY
110 O_CREAT
111 O_DEFER
ca6e1c26
JH
112 O_DIRECT
113 O_DIRECTORY
0fd60c2a
JH
114 O_DSYNC
115 O_EXCL
116 O_EXLOCK
5ff3f7a4 117 O_LARGEFILE
0fd60c2a
JH
118 O_NDELAY
119 O_NOCTTY
ca6e1c26 120 O_NOFOLLOW
0fd60c2a
JH
121 O_NONBLOCK
122 O_RDONLY
123 O_RDWR
ca6e1c26 124 O_RSRC
0fd60c2a
JH
125 O_RSYNC
126 O_SHLOCK
127 O_SYNC
ca6e1c26 128 O_TEMPORARY
0fd60c2a
JH
129 O_TEXT
130 O_TRUNC
131 O_WRONLY
a0d0e21e 132 );
705af498 133
a0d0e21e
LW
134# Other items we are prepared to export if requested
135@EXPORT_OK = qw(
0fd60c2a
JH
136 FAPPEND
137 FASYNC
138 FCREAT
139 FDEFER
ac88732c 140 FDSYNC
0fd60c2a 141 FEXCL
ac88732c 142 FLARGEFILE
0fd60c2a
JH
143 FNDELAY
144 FNONBLOCK
ac88732c 145 FRSYNC
0fd60c2a
JH
146 FSYNC
147 FTRUNC
148 LOCK_EX
149 LOCK_NB
150 LOCK_SH
151 LOCK_UN
ca6e1c26
JH
152 S_ISUID S_ISGID S_ISVTX S_ISTXT
153 _S_IFMT S_IFREG S_IFDIR S_IFLNK
154 S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
155 S_IRUSR S_IWUSR S_IXUSR S_IRWXU
156 S_IRGRP S_IWGRP S_IXGRP S_IRWXG
157 S_IROTH S_IWOTH S_IXOTH S_IRWXO
158 S_IREAD S_IWRITE S_IEXEC
159 &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO
160 &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE
161 SEEK_SET
162 SEEK_CUR
163 SEEK_END
7e1af8bc
PP
164);
165# Named groups of exports
166%EXPORT_TAGS = (
3e3baf6d 167 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
ac88732c 168 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
ca6e1c26
JH
169 FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
170 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)],
171 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
172 _S_IFMT S_IFREG S_IFDIR S_IFLNK
173 S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
174 S_IRUSR S_IWUSR S_IXUSR S_IRWXU
175 S_IRGRP S_IWGRP S_IXGRP S_IRWXG
176 S_IROTH S_IWOTH S_IXOTH S_IRWXO
177 S_IREAD S_IWRITE S_IEXEC
178 &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK
179 &S_ISBLK &S_ISCHR &S_ISFIFO
180 &S_ISWHT &S_ISENFMT
181 &S_IFMT &S_IMODE
182 )],
a0d0e21e
LW
183);
184
ca6e1c26
JH
185sub FD_CLOEXEC ();
186
187sub F_ALLOCSP ();
188sub F_ALLOCSP64 ();
189sub F_COMPAT ();
190sub F_DUP2FD ();
191sub F_DUPFD ();
192sub F_EXLCK ();
193sub F_FREESP ();
194sub F_FREESP64 ();
195sub F_FSYNC ();
196sub F_FSYNC64 ();
197sub F_GETFD ();
198sub F_GETFL ();
199sub F_GETLK ();
200sub F_GETLK64 ();
201sub F_GETOWN ();
202sub F_NODNY ();
203sub F_POSIX ();
204sub F_RDACC ();
205sub F_RDDNY ();
206sub F_RDLCK ();
207sub F_RWACC ();
208sub F_RWDNY ();
209sub F_SETFD ();
210sub F_SETFL ();
211sub F_SETLK ();
212sub F_SETLK64 ();
213sub F_SETLKW ();
214sub F_SETLKW64 ();
215sub F_SETOWN ();
216sub F_SHARE ();
217sub F_SHLCK ();
218sub F_UNLCK ();
219sub F_UNSHARE ();
220sub F_WRACC ();
221sub F_WRDNY ();
222sub F_WRLCK ();
223
224sub O_ACCMODE ();
225sub O_ALIAS ();
226sub O_APPEND ();
227sub O_ASYNC ();
228sub O_BINARY ();
229sub O_CREAT ();
230sub O_DEFER ();
231sub O_DIRECT ();
232sub O_DIRECTORY ();
233sub O_DSYNC ();
234sub O_EXCL ();
235sub O_EXLOCK ();
236sub O_LARGEFILE ();
237sub O_NDELAY ();
238sub O_NOCTTY ();
239sub O_NOFOLLOW ();
240sub O_NONBLOCK ();
241sub O_RDONLY ();
242sub O_RDWR ();
243sub O_RSRC ();
244sub O_RSYNC ();
245sub O_SHLOCK ();
246sub O_SYNC ();
247sub O_TEMPORARY ();
248sub O_TEXT ();
249sub O_TRUNC ();
250sub O_WRONLY ();
251
252sub FAPPEND ();
253sub FASYNC ();
254sub FCREAT ();
255sub FDEFER ();
256sub FDSYNC ();
257sub FEXCL ();
258sub FLARGEFILE ();
259sub FNDELAY ();
260sub FNONBLOCK ();
261sub FRSYNC ();
262sub FSYNC ();
263sub FTRUNC ();
264
265sub LOCK_EX ();
266sub LOCK_NB ();
267sub LOCK_SH ();
268sub LOCK_UN ();
269
270sub SEEK_SET ();
271sub SEEK_CUR ();
272sub SEEK_END ();
273
274sub S_ISUID ();
275sub S_ISGID ();
276sub S_ISVTX ();
277sub S_ISTXT ();
278sub _S_IFMT ();
279sub S_IFMT (;$);
280sub S_IMODE ($);
281sub S_IFREG ();
282sub S_IFDIR ();
283sub S_IFLNK ();
284sub S_IFSOCK ();
285sub S_IFBLK ();
286sub S_IFCHR ();
287sub S_IFIFO ();
288sub S_IFWHT ();
289sub S_ENFMT ();
290sub S_IRUSR ();
291sub S_IWUSR ();
292sub S_IXUSR ();
293sub S_IRWXU ();
294sub S_IRGRP ();
295sub S_IWGRP ();
296sub S_IXGRP ();
297sub S_IRWXG ();
298sub S_IROTH ();
299sub S_IWOTH ();
300sub S_IXOTH ();
301sub S_IRWXO ();
302sub S_IREAD ();
303sub S_IWRITE ();
304sub S_IEXEC ();
305
306sub S_IFREG ();
307sub S_IFDIR ();
308sub S_IFLNK ();
309sub S_IFSOCK ();
310sub S_IFBLK ();
311sub S_IFCHR ();
312sub S_IFIFO ();
313sub S_IFWHT ();
314sub S_IFENFMT ();
315
316sub S_IFMT (;$) { @_ ? ( $_[0] & _S_IFMT ) : _S_IFMT }
317sub S_IMODE ($) { $_[0] & 07777 }
318
319sub S_ISREG ($) { ( $_[0] & _S_IFMT ) == S_IFREG }
320sub S_ISDIR ($) { ( $_[0] & _S_IFMT ) == S_IFDIR }
321sub S_ISLNK ($) { ( $_[0] & _S_IFMT ) == S_IFLNK }
322sub S_ISSOCK ($) { ( $_[0] & _S_IFMT ) == S_IFSOCK }
323sub S_ISBLK ($) { ( $_[0] & _S_IFMT ) == S_IFBLK }
324sub S_ISCHR ($) { ( $_[0] & _S_IFMT ) == S_IFCHR }
325sub S_ISFIFO ($) { ( $_[0] & _S_IFMT ) == S_IFIFO }
326sub S_ISWHT ($) { ( $_[0] & _S_IFMT ) == S_ISWHT }
327sub S_ISENFMT ($) { ( $_[0] & _S_IFMT ) == S_ISENFMT }
328
a0d0e21e 329sub AUTOLOAD {
36c2d165
GS
330 (my $constname = $AUTOLOAD) =~ s/.*:://;
331 my $val = constant($constname, 0);
a0d0e21e 332 if ($! != 0) {
265f5c4a 333 if ($! =~ /Invalid/ || $!{EINVAL}) {
a0d0e21e
LW
334 $AutoLoader::AUTOLOAD = $AUTOLOAD;
335 goto &AutoLoader::AUTOLOAD;
336 }
337 else {
73c78b0a 338 my ($pack,$file,$line) = caller;
a0d0e21e
LW
339 die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
340";
341 }
342 }
ca6e1c26 343 *$AUTOLOAD = sub () { $val };
a0d0e21e
LW
344 goto &$AUTOLOAD;
345}
346
9426adcd 347XSLoader::load 'Fcntl', $VERSION;
a0d0e21e 348
a0d0e21e 3491;