5 Fcntl - load the C Fcntl.h defines
10 use Fcntl qw(:DEFAULT :flock);
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.
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.
25 =head1 EXPORTED SYMBOLS
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.
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>.
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,
40 For ease of use also the SEEK_* constants (for seek() and sysseek(),
41 e.g. SEEK_END) and the S_I* constants (for chmod() and stat()) are
42 available for import. They can be imported either separately or using
43 the tags C<:seek> and C<:mode>.
45 Please refer to your native fcntl(2), open(2), fseek(3), lseek(2)
46 (equal to Perl's seek() and sysseek(), respectively), and chmod(2)
47 documentation to see what constants are implemented in your system.
49 See L<perlopentut> to learn about the uses of the O_* constants
52 See L<perlfunc/seek> and L<perlfunc/sysseek> about the SEEK_* constants.
54 See L<perlfunc/stat> about the S_I* constants.
58 our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD);
64 # Items to export into callers namespace by default
65 # (move infrequently used names to @EXPORT_OK below)
134 # Other items we are prepared to export if requested
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
165 # Named groups of exports
167 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
168 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
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
316 sub S_IFMT (;$) { @_ ? ( $_[0] & _S_IFMT ) : _S_IFMT }
317 sub S_IMODE ($) { $_[0] & 07777 }
319 sub S_ISREG ($) { ( $_[0] & _S_IFMT ) == S_IFREG }
320 sub S_ISDIR ($) { ( $_[0] & _S_IFMT ) == S_IFDIR }
321 sub S_ISLNK ($) { ( $_[0] & _S_IFMT ) == S_IFLNK }
322 sub S_ISSOCK ($) { ( $_[0] & _S_IFMT ) == S_IFSOCK }
323 sub S_ISBLK ($) { ( $_[0] & _S_IFMT ) == S_IFBLK }
324 sub S_ISCHR ($) { ( $_[0] & _S_IFMT ) == S_IFCHR }
325 sub S_ISFIFO ($) { ( $_[0] & _S_IFMT ) == S_IFIFO }
326 sub S_ISWHT ($) { ( $_[0] & _S_IFMT ) == S_ISWHT }
327 sub S_ISENFMT ($) { ( $_[0] & _S_IFMT ) == S_ISENFMT }
330 (my $constname = $AUTOLOAD) =~ s/.*:://;
331 my $val = constant($constname, 0);
333 if ($! =~ /Invalid/ || $!{EINVAL}) {
334 $AutoLoader::AUTOLOAD = $AUTOLOAD;
335 goto &AutoLoader::AUTOLOAD;
338 my ($pack,$file,$line) = caller;
339 die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
343 *$AUTOLOAD = sub () { $val };
347 XSLoader::load 'Fcntl', $VERSION;