This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
In Glob.xs, use memset() instead of bzero()
[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<fcntl.h> file.
15 Unlike the old mechanism of requiring a translated F<fcntl.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 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>.
44
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.
48
49 See L<perlopentut> to learn about the uses of the O_* constants
50 with sysopen().
51
52 See L<perlfunc/seek> and L<perlfunc/sysseek> about the SEEK_* constants.
53
54 See L<perlfunc/stat> about the S_I* constants.
55
56 =cut
57
58 use strict;
59 our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
60
61 require Exporter;
62 require XSLoader;
63 @ISA = qw(Exporter);
64 $VERSION = '1.11';
65
66 XSLoader::load();
67
68 # Named groups of exports
69 %EXPORT_TAGS = (
70     'flock'   => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
71     'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
72                      FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
73     'seek'    => [qw(SEEK_SET SEEK_CUR SEEK_END)],
74     'mode'    => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
75                      _S_IFMT S_IFREG S_IFDIR S_IFLNK
76                      S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
77                      S_IRUSR S_IWUSR S_IXUSR S_IRWXU
78                      S_IRGRP S_IWGRP S_IXGRP S_IRWXG
79                      S_IROTH S_IWOTH S_IXOTH S_IRWXO
80                      S_IREAD S_IWRITE S_IEXEC
81                      S_ISREG S_ISDIR S_ISLNK S_ISSOCK
82                      S_ISBLK S_ISCHR S_ISFIFO
83                      S_ISWHT S_ISENFMT          
84                      S_IFMT S_IMODE
85                   )],
86 );
87
88 # Items to export into callers namespace by default
89 # (move infrequently used names to @EXPORT_OK below)
90 @EXPORT =
91   qw(
92         FD_CLOEXEC
93         F_ALLOCSP
94         F_ALLOCSP64
95         F_COMPAT
96         F_DUP2FD
97         F_DUPFD
98         F_EXLCK
99         F_FREESP
100         F_FREESP64
101         F_FSYNC
102         F_FSYNC64
103         F_GETFD
104         F_GETFL
105         F_GETLK
106         F_GETLK64
107         F_GETOWN
108         F_NODNY
109         F_POSIX
110         F_RDACC
111         F_RDDNY
112         F_RDLCK
113         F_RWACC
114         F_RWDNY
115         F_SETFD
116         F_SETFL
117         F_SETLK
118         F_SETLK64
119         F_SETLKW
120         F_SETLKW64
121         F_SETOWN
122         F_SHARE
123         F_SHLCK
124         F_UNLCK
125         F_UNSHARE
126         F_WRACC
127         F_WRDNY
128         F_WRLCK
129         O_ACCMODE
130         O_ALIAS
131         O_APPEND
132         O_ASYNC
133         O_BINARY
134         O_CREAT
135         O_DEFER
136         O_DIRECT
137         O_DIRECTORY
138         O_DSYNC
139         O_EXCL
140         O_EXLOCK
141         O_LARGEFILE
142         O_NDELAY
143         O_NOCTTY
144         O_NOFOLLOW
145         O_NOINHERIT
146         O_NONBLOCK
147         O_RANDOM
148         O_RAW
149         O_RDONLY
150         O_RDWR
151         O_RSRC
152         O_RSYNC
153         O_SEQUENTIAL
154         O_SHLOCK
155         O_SYNC
156         O_TEMPORARY
157         O_TEXT
158         O_TRUNC
159         O_WRONLY
160      );
161
162 # Other items we are prepared to export if requested
163 @EXPORT_OK = (qw(
164         DN_ACCESS
165         DN_ATTRIB
166         DN_CREATE
167         DN_DELETE
168         DN_MODIFY
169         DN_MULTISHOT
170         DN_RENAME
171         F_GETLEASE
172         F_GETSIG
173         F_NOTIFY
174         F_SETLEASE
175         F_SETSIG
176         LOCK_MAND
177         LOCK_READ
178         LOCK_RW
179         LOCK_WRITE
180         O_IGNORE_CTTY
181         O_NOATIME
182         O_NOLINK
183         O_NOTRANS
184 ), map {@{$_}} values %EXPORT_TAGS);
185
186 1;