<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">package Fcntl;

=head1 NAME

Fcntl - various flag constants and helper functions from C's fcntl.h

=head1 SYNOPSIS

    use Fcntl;
    use Fcntl qw(:DEFAULT :flock);
    use Fcntl qw(F_GETFD F_SETFD FD_CLOEXEC);

=head1 DESCRIPTION

This module provides flags and helper functions for use with L&lt;perlfunc/chmod&gt;
(S_*), L&lt;perlfunc/fcntl&gt; (F_*), L&lt;perlfunc/flock&gt; (LOCK_*), L&lt;perlfunc/seek&gt;
(SEEK_*), L&lt;perlfunc/stat&gt; (S_*), L&lt;perlfunc/sysopen&gt; (O_*), and
L&lt;perlfunc/sysseek&gt; (SEEK_*). They correspond to the C macros defined in
F&lt;fcntl.h&gt;.

Not all symbols are available on all systems. Except where noted otherwise,
the constants and functions provided by this module will throw a runtime
exception if the corresponding C macro is not available. Consult your system
documentation to see the full description of each symbol and whether it is
available on your platform: L&lt;chmod(2)&gt;, L&lt;fcntl(2)&gt;, L&lt;flock(2)&gt;,
L&lt;lseek(2)&gt;, L&lt;open(2)&gt;, L&lt;stat(2)&gt;.

(In particular, some of the F_* symbols are highly non-portable because they
only exist on a single platform or require system-specific C data structures to
be passed as the third argument to C&lt;fcntl&gt;, which can't be portably
constructed in pure Perl.)

=head1 EXPORTED SYMBOLS

=head2 Default exports and export tags

The full list of default exports can be found below in L&lt;/APPENDIX A&gt;.

In addition, the following export tags are available (see L&lt;Exporter&gt; for more
information on export tags):

=over

=item C&lt;:DEFAULT&gt;

Equivalent to the list of default export symbols (see L&lt;/APPENDIX A&gt;).

=item C&lt;:flock&gt;

Equivalent to all LOCK_* symbols listed below.

=item C&lt;:mode&gt;

Equivalent to all S_* symbols listed below.

=item C&lt;:seek&gt;

Equivalent to all SEEK_* symbols listed below.

=item C&lt;:Fcompat&gt;

Equivalent to C&lt;qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE FNDELAY
FNONBLOCK FRSYNC FSYNC FTRUNC)&gt;. These only exist for compatibility with old
code (if your platform defines them at all) and should not be used in new code.

=back

=head2 Symbols for use with C&lt;fcntl&gt;

=over

=item C&lt;F_ALLOCSP&gt;

File storage manipulation.

=item C&lt;F_ALLOCSP64&gt;

File storage manipulation.

=item C&lt;F_DUP2FD&gt;

Duplicate a file descriptor to the number specified in the third argument to
C&lt;fcntl&gt; (if it refers to an open file, it is automatically closed first).

=item C&lt;F_DUPFD&gt;

Duplicate a file descriptor to the lowest unused number greater than or equal
to the third argument of C&lt;fcntl&gt;.

=item C&lt;F_FREESP&gt;

File storage manipulation.

=item C&lt;F_FREESP64&gt;

File storage manipulation.

=item C&lt;F_FSYNC&gt;

Synchronize file data to disk.

=item C&lt;F_FSYNC64&gt;

Synchronize file data to disk.

=item C&lt;F_GETFD&gt;

Return (as a number) the set of file descriptor flags, in which the following
bits may be set:

=over

=item C&lt;FD_CLOEXEC&gt;

During a successful C&lt;exec&gt; call, the file descriptor will be closed
automatically.

=back

=item C&lt;F_GETFL&gt;

Return (as a number) the set of file description status flags (O_*) as set by
C&lt;open&gt; and C&lt;fcntl&gt;. To determine the file access mode, perform a bitwise AND
with L&lt;/C&lt;O_ACCMODE&gt;&gt; and see whether the result is equal to C&lt;O_RDONLY&gt;,
C&lt;O_WRONLY&gt;, or C&lt;O_RDWR&gt;.

=item C&lt;F_GETLEASE&gt;

Indicate the type of lease associated with the filehandle (if any) by returning
one of the following flags:

=over

=item C&lt;F_RDLCK&gt;

A read lease.

=item C&lt;F_WRLCK&gt;

A write lease.

=item C&lt;F_UNLCK&gt;

No lease.

=back

=item C&lt;F_GETLK&gt;

Test for the existence of record locks on the file.

=item C&lt;F_GETLK64&gt;

Test for the existence of record locks on the file.

=item C&lt;F_GETOWN&gt;

Return the ID of the process (as a positive number) or group (as a negative
number) that is currently receiving signals for events on the file descriptor.

=item C&lt;F_GETPIPE_SZ&gt;

Return the capacity of the pipe associated with the filehandle.

=item C&lt;F_GETSIG&gt;

Return the number of the signal sent when input or output becomes possible on
the filehandle. A return value of C&lt;0&gt; means C&lt;SIGIO&gt;.

=item C&lt;F_NOTIFY&gt;

File and directory change notification with signals.

=over

=item C&lt;DN_ACCESS&gt;

=item C&lt;DN_ATTRIB&gt;

=item C&lt;DN_CREATE&gt;

=item C&lt;DN_DELETE&gt;

=item C&lt;DN_MODIFY&gt;

=item C&lt;DN_MULTISHOT&gt;

=item C&lt;DN_RENAME&gt;

=back

Z&lt;&gt;

=item C&lt;F_SETFD&gt;

Set the file descriptor flags. See L&lt;/C&lt;F_GETFD&gt;&gt; for the list of available
flags.

=item C&lt;F_SETFL&gt;

Set the file description status flags (O_*). Only some flags can be changed
this way.

=item C&lt;F_SETLEASE&gt;

Set a file lease as specified by the third C&lt;fnctl&gt; argument, which must be one
of the following:

=over

=item C&lt;F_RDLCK&gt;

Set a read lease.

=item C&lt;F_WRLCK&gt;

Set a write lease.

=item C&lt;F_UNLCK&gt;

Remove a lease.

=back

=item C&lt;F_SETLK&gt;

Acquire a record lock.

=item C&lt;F_SETLK64&gt;

Acquire a record lock.

=item C&lt;F_SETLKW&gt;

Acquire a record lock and wait for conflicting locks to be released.

=item C&lt;F_SETLKW64&gt;

Acquire a record lock and wait for conflicting locks to be released.

=item C&lt;F_SETOWN&gt;

Set the ID of the process (as a positive number) or group (as a negative
number) that will receive signals for events on the file descriptor.

=item C&lt;F_SETPIPE_SZ&gt;

Set the capacity of the pipe associated with the filehandle. Return the actual
capacity reserved for the pipe, which may be higher than requested.

=item C&lt;F_SETSIG&gt;

Set the number of the signal sent when input or output becomes possible on the
filehandle. An argument of C&lt;0&gt; means C&lt;SIGIO&gt;.

=item C&lt;F_SHARE&gt;

Set share reservation.

=item C&lt;F_UNSHARE&gt;

Remove share reservation.

=item C&lt;F_COMPAT&gt;

=item C&lt;F_EXLCK&gt;

=item C&lt;F_NODNY&gt;

=item C&lt;F_POSIX&gt;

=item C&lt;F_RDACC&gt;

=item C&lt;F_RDDNY&gt;

=item C&lt;F_RWACC&gt;

=item C&lt;F_RWDNY&gt;

=item C&lt;F_SHLCK&gt;

=item C&lt;F_WRACC&gt;

=item C&lt;F_WRDNY&gt;

=back

=head2 Symbols for use with C&lt;flock&gt;

=over

=item C&lt;LOCK_EX&gt;

Request an exclusive lock.

=item C&lt;LOCK_MAND&gt;

Request a mandatory lock.

=item C&lt;LOCK_NB&gt;

Make lock request non-blocking (can be combined with other LOCK_* flags using bitwise OR).

=item C&lt;LOCK_READ&gt;

With C&lt;LOCK_MAND&gt;: Allow concurrent reads.

=item C&lt;LOCK_RW&gt;

With C&lt;LOCK_MAND&gt;: Allow concurrent reads and writes.

=item C&lt;LOCK_SH&gt;

Request a shared lock.

=item C&lt;LOCK_UN&gt;

Release a held lock.

=item C&lt;LOCK_WRITE&gt;

With C&lt;LOCK_MAND&gt;: Allow concurrent writes.

=back

=head2 Symbols for use with C&lt;sysopen&gt;

=over

=item C&lt;O_ACCMODE&gt;

Bit mask for extracting the file access mode (read-only, write-only, or
read/write) from the other flags. This is mainly useful in combination with
L&lt;/C&lt;F_GETFL&gt;&gt;.

=item C&lt;O_ALIAS&gt;

(Mac OS) Open alias file (instead of the file that the alias refers to).

=item C&lt;O_ALT_IO&gt;

(NetBSD) Use alternative I/O semantics.

=item C&lt;O_APPEND&gt;

Open the file in append mode. Writes always go to the end of the file.

=item C&lt;O_ASYNC&gt;

Enable signal-based I/O. When the file becomes readable or writable, a signal
is sent.

=item C&lt;O_BINARY&gt;

(Windows) Open the file in binary mode.

=item C&lt;O_CREAT&gt;

If the file to be opened does not exist yet, create it.

=item C&lt;O_DEFER&gt;

(AIX) Changes to the file are kept in memory and not written to disk until the
program performs an explicit L&lt;&lt; C&lt;&lt; $fh-&gt;sync() &gt;&gt;|IO::Handle/$io-&gt;sync &gt;&gt;.

=item C&lt;O_DIRECT&gt;

Perform direct I/O to/from user-space buffers; avoid caching at the OS level.

=item C&lt;O_DIRECTORY&gt;

Fail if the filename to be opened does not refer to a directory.

=item C&lt;O_DSYNC&gt;

Synchronize file data immediately, like calling L&lt;fdatasync(2)&gt; after each
write.

=item C&lt;O_EVTONLY&gt;

(Mac OS) Open the file for event notifications, not reading or writing.

=item C&lt;O_EXCL&gt;

If the file already exists, fail and set C&lt;$!&gt; to L&lt;C&lt;EEXIST&gt;|Errno&gt; (this only
makes sense in combination with C&lt;O_CREAT&gt;).

=item C&lt;O_EXLOCK&gt;

When the file is opened, atomically obtain an exclusive lock.

=item C&lt;O_IGNORE_CTTY&gt;

(Hurd) If the file to be opened is the controlling terminal for this process,
don't recognize it as such. Operations on this filehandle won't trigger job
control signals.

=item C&lt;O_LARGEFILE&gt;

On 32-bit platforms, allow opening files whose size exceeds 2 GiB
(2,147,483,647 bytes).

=item C&lt;O_NDELAY&gt;

Compatibility symbol. Use C&lt;O_NONBLOCK&gt; instead.

=item C&lt;O_NOATIME&gt;

Don't update the access time of the file when reading from it.

=item C&lt;O_NOCTTY&gt;

If the process does not have a controlling terminal and the file to be opened
is a terminal device, don't make it the controlling terminal of the process.

=item C&lt;O_NOFOLLOW&gt;

If the final component of the filename is a symbolic link, fail and set C&lt;$!&gt;
to L&lt;C&lt;ELOOP&gt;|Errno&gt;.

=item C&lt;O_NOINHERIT&gt;

(Windows) Don't let child processes inherit the opened file descriptor.

=item C&lt;O_NOLINK&gt;

(Hurd) If the file to be opened is a symbolic link, don't follow it; open the
link itself.

=item C&lt;O_NONBLOCK&gt;

Open the file in non-blocking mode. Neither the open itself nor any read/write
operations on the filehandle will block. (This is mainly useful for pipes and
sockets. It has no effect on regular files.)

=item C&lt;O_NOSIGPIPE&gt;

If the file to be opened is a pipe, then don't raise C&lt;SIGPIPE&gt; for write
operations when the read end of the pipe is closed; make the write fail with
C&lt;EPIPE&gt; instead.

=item C&lt;O_NOTRANS&gt;

(Hurd) If the file to be opened is specially translated, don't invoke the
translator; open the bare file itself.

=item C&lt;O_RANDOM&gt;

(Windows) Indicate that the program intends to access the file contents
randomly (without a predictable pattern). This is an optimization hint for the
file cache (but may cause excessive memory use on large files).

=item C&lt;O_RAW&gt;

(Windows) Same as C&lt;O_BINARY&gt;.

=item C&lt;O_RDONLY&gt;

Open the file for reading (only).

=item C&lt;O_RDWR&gt;

Open the file for reading and writing.

=item C&lt;O_RSRC&gt;

(Mac OS) Open the resource fork of the file.

=item C&lt;O_RSYNC&gt;

Extend the effects of C&lt;O_SYNC&gt; and C&lt;O_DSYNC&gt; to read operations. In
particular, reading from a filehandle opened with C&lt;O_SYNC | O_RSYNC&gt; will wait
until the access time of the file has been modified on disk.

=item C&lt;O_SEQUENTIAL&gt;

(Windows) Indicate that the program intends to access the file contents
sequentially. This is an optimization hint for the file cache.

=item C&lt;O_SHLOCK&gt;

When the file is opened, atomically obtain a shared lock.

=item C&lt;O_SYMLINK&gt;

If the file to be opened is a symbolic link, don't follow it; open the link
itself.

=item C&lt;O_SYNC&gt;

Synchronize file data and metadata immediately, like calling L&lt;fsync(2)&gt; after
each write.

=item C&lt;O_TEMPORARY&gt;

(Windows) Delete the file when its last open file descriptor is closed.

=item C&lt;O_TEXT&gt;

(Windows) Open the file in text mode.

=item C&lt;O_TMPFILE&gt;

Create an unnamed temporary file. The filename argument specifies the directory
the unnamed file should be placed in.

=item C&lt;O_TRUNC&gt;

If the file already exists, truncate its contents to length 0.

=item C&lt;O_TTY_INIT&gt;

If the file to be opened is a terminal that is not already open in any process,
initialize its L&lt;termios|POSIX/C&lt;POSIX::Termios&gt;&gt; parameters.

=item C&lt;O_WRONLY&gt;

Open the file for writing (only).

=item C&lt;FAPPEND&gt;

Compatibility symbol. Use C&lt;O_APPEND&gt; instead.

=item C&lt;FASYNC&gt;

Compatibility symbol. Use C&lt;O_ASYNC&gt; instead.

=item C&lt;FCREAT&gt;

Compatibility symbol. Use C&lt;O_CREAT&gt; instead.

=item C&lt;FDEFER&gt;

Compatibility symbol. Use C&lt;O_DEFER&gt; instead.

=item C&lt;FDSYNC&gt;

Compatibility symbol. Use C&lt;O_DSYNC&gt; instead.

=item C&lt;FEXCL&gt;

Compatibility symbol. Use C&lt;O_EXCL&gt; instead.

=item C&lt;FLARGEFILE&gt;

Compatibility symbol. Use C&lt;O_LARGEFILE&gt; instead.

=item C&lt;FNDELAY&gt;

Compatibility symbol. Use C&lt;O_NDELAY&gt; instead.

=item C&lt;FNONBLOCK&gt;

Compatibility symbol. Use C&lt;O_NONBLOCK&gt; instead.

=item C&lt;FRSYNC&gt;

Compatibility symbol. Use C&lt;O_RSYNC&gt; instead.

=item C&lt;FSYNC&gt;

Compatibility symbol. Use C&lt;O_SYNC&gt; instead.

=item C&lt;FTRUNC&gt;

Compatibility symbol. Use C&lt;O_TRUNC&gt; instead.

=back

=head2 Symbols for use with C&lt;seek&gt; and C&lt;sysseek&gt;

=over

=item C&lt;SEEK_CUR&gt;

File offsets are relative to the current position in the file.

=item C&lt;SEEK_END&gt;

File offsets are relative to the end of the file (i.e. mostly negative).

=item C&lt;SEEK_SET&gt;

File offsets are absolute (i.e. relative to the beginning of the file).

=back

=head2 Symbols for use with C&lt;stat&gt; and C&lt;chmod&gt;

=over

=item C&lt;S_ENFMT&gt;

Enforce mandatory file locks. (This symbol typically shares its value with
C&lt;S_ISGID&gt;.)

=item C&lt;S_IEXEC&gt;

Compatibility symbol. Use C&lt;S_IXUSR&gt; instead.

=item C&lt;S_IFBLK&gt;

File type: Block device.

=item C&lt;S_IFCHR&gt;

File type: Character device.

=item C&lt;S_IFDIR&gt;

File type: Directory.

=item C&lt;S_IFIFO&gt;

File type: Fifo/pipe.

=item C&lt;S_IFLNK&gt;

File type: Symbolic link.

=item C&lt;S_IFMT&gt;

Bit mask for extracting the file type bits. This symbol can also be used as a
function: C&lt;S_IFMT($mode)&gt; acts like C&lt;$mode &amp; S_IFMT&gt;. The result will be
equal to one of the other S_IF* constants.

=item C&lt;_S_IFMT&gt;

Bit mask for extracting the file type bits. This symbol is an actual constant
and cannot be used as a function; otherwise it is identical to C&lt;S_IFMT&gt;.

=item C&lt;S_IFREG&gt;

File type: Regular file.

=item C&lt;S_IFSOCK&gt;

File type: Socket.

=item C&lt;S_IFWHT&gt;

File type: Whiteout file (used to mark the absence/deletion of a file in overlays).

=item C&lt;S_IMODE&gt;

Function for extracting the permission bits from a file mode.

=item C&lt;S_IREAD&gt;

Compatibility symbol. Use C&lt;S_IRUSR&gt; instead.

=item C&lt;S_IRGRP&gt;

Permissions: Readable by group.

=item C&lt;S_IROTH&gt;

Permissions: Readable by others.

=item C&lt;S_IRUSR&gt;

Permissions: Readable by owner.

=item C&lt;S_IRWXG&gt;

Bit mask for extracting group permissions.

=item C&lt;S_IRWXO&gt;

Bit mask for extracting other permissions.

=item C&lt;S_IRWXU&gt;

Bit mask for extracting owner ("user") permissions.

=item C&lt;S_ISBLK&gt;

Convenience function to check for block devices: C&lt;S_ISBLK($mode)&gt; is
equivalent to C&lt;S_IFMT($mode) == S_IFBLK&gt;.

=item C&lt;S_ISCHR&gt;

Convenience function to check for character  devices: C&lt;S_ISCHR($mode)&gt; is
equivalent to C&lt;S_IFMT($mode) == S_IFCHR&gt;.

=item C&lt;S_ISDIR&gt;

Convenience function to check for directories: C&lt;S_ISDIR($mode)&gt; is
equivalent to C&lt;S_IFMT($mode) == S_IFDIR&gt;.

=item C&lt;S_ISENFMT&gt;

Broken function; do not use. (C&lt;S_ISENFMT($mode)&gt; should always return false,
anyway.)

=item C&lt;S_ISFIFO&gt;

Convenience function to check for fifos: C&lt;S_ISFIFO($mode)&gt; is
equivalent to C&lt;S_IFMT($mode) == S_IFIFO&gt;.

=item C&lt;S_ISGID&gt;

Permissions: Set effective group ID from file (when running executables);
mandatory locking (on non-group-executable files); new files inherit their
group from the directory (on directories).

=item C&lt;S_ISLNK&gt;

Convenience function to check for symbolic links: C&lt;S_ISLNK($mode)&gt; is
equivalent to C&lt;S_IFMT($mode) == S_IFLNK&gt;.

=item C&lt;S_ISREG&gt;

Convenience function to check for regular files: C&lt;S_ISREG($mode)&gt; is
equivalent to C&lt;S_IFMT($mode) == S_IFREG&gt;.

=item C&lt;S_ISSOCK&gt;

Convenience function to check for sockets: C&lt;S_ISSOCK($mode)&gt; is
equivalent to C&lt;S_IFMT($mode) == S_IFSOCK&gt;.

=item C&lt;S_ISTXT&gt;

Compatibility symbol. Use C&lt;S_ISVTX&gt; instead.

=item C&lt;S_ISUID&gt;

Permissions: Set effective user ID from file (when running executables).

=item C&lt;S_ISVTX&gt;

Permissions: Files in this directory can only be deleted/renamed by their owner
(or the directory's owner), even if other users have write permissions to the
directory ("sticky bit").

=item C&lt;S_ISWHT&gt;

Convenience function to check for whiteout files: C&lt;S_ISWHT($mode)&gt; is
equivalent to C&lt;S_IFMT($mode) == S_IFWHT&gt;.

=item C&lt;S_IWGRP&gt;

Permissions: Writable by group.

=item C&lt;S_IWOTH&gt;

Permissions: Writable by others.

=item C&lt;S_IWRITE&gt;

Compatibility symbol. Use C&lt;S_IWUSR&gt; instead.

=item C&lt;S_IWUSR&gt;

Permissions: Writable by owner.

=item C&lt;S_IXGRP&gt;

Permissions: Executable/searchable by group.

=item C&lt;S_IXOTH&gt;

Permissions: Executable/searchable by others.

=item C&lt;S_IXUSR&gt;

Permissions: Executable/searchable by owner.

=back

=head1 SEE ALSO

L&lt;perlfunc/chmod&gt;, L&lt;chmod(2)&gt;,
L&lt;perlfunc/fcntl&gt;, L&lt;fcntl(2)&gt;,
L&lt;perlfunc/flock&gt;, L&lt;flock(2)&gt;,
L&lt;perlfunc/seek&gt;, L&lt;fseek(3)&gt;,
L&lt;perlfunc/stat&gt;, L&lt;stat(2)&gt;,
L&lt;perlfunc/sysopen&gt;, L&lt;open(2)&gt;,
L&lt;perlfunc/sysseek&gt;, L&lt;lseek(2)&gt;

=head1 APPENDIX A

By default, if you say C&lt;use Fcntl;&gt;, the following symbols are exported:

    FD_CLOEXEC
    F_ALLOCSP
    F_ALLOCSP64
    F_COMPAT
    F_DUP2FD
    F_DUPFD
    F_EXLCK
    F_FREESP
    F_FREESP64
    F_FSYNC
    F_FSYNC64
    F_GETFD
    F_GETFL
    F_GETLK
    F_GETLK64
    F_GETOWN
    F_NODNY
    F_POSIX
    F_RDACC
    F_RDDNY
    F_RDLCK
    F_RWACC
    F_RWDNY
    F_SETFD
    F_SETFL
    F_SETLK
    F_SETLK64
    F_SETLKW
    F_SETLKW64
    F_SETOWN
    F_SHARE
    F_SHLCK
    F_UNLCK
    F_UNSHARE
    F_WRACC
    F_WRDNY
    F_WRLCK
    O_ACCMODE
    O_ALIAS
    O_APPEND
    O_ASYNC
    O_BINARY
    O_CREAT
    O_DEFER
    O_DIRECT
    O_DIRECTORY
    O_DSYNC
    O_EXCL
    O_EXLOCK
    O_LARGEFILE
    O_NDELAY
    O_NOCTTY
    O_NOFOLLOW
    O_NOINHERIT
    O_NONBLOCK
    O_RANDOM
    O_RAW
    O_RDONLY
    O_RDWR
    O_RSRC
    O_RSYNC
    O_SEQUENTIAL
    O_SHLOCK
    O_SYNC
    O_TEMPORARY
    O_TEXT
    O_TRUNC
    O_WRONLY

=cut

use strict;

use Exporter 'import';
require XSLoader;
our $VERSION = '1.18';

XSLoader::load();

# Named groups of exports
our %EXPORT_TAGS = (
    'flock'   =&gt; [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
    'Fcompat' =&gt; [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
		     FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
    'seek'    =&gt; [qw(SEEK_SET SEEK_CUR SEEK_END)],
    'mode'    =&gt; [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
		     _S_IFMT S_IFREG S_IFDIR S_IFLNK
		     S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
		     S_IRUSR S_IWUSR S_IXUSR S_IRWXU
		     S_IRGRP S_IWGRP S_IXGRP S_IRWXG
		     S_IROTH S_IWOTH S_IXOTH S_IRWXO
		     S_IREAD S_IWRITE S_IEXEC
		     S_ISREG S_ISDIR S_ISLNK S_ISSOCK
		     S_ISBLK S_ISCHR S_ISFIFO
		     S_ISWHT S_ISENFMT
		     S_IFMT S_IMODE
                  )],
);

# Items to export into callers namespace by default
# (move infrequently used names to @EXPORT_OK below)
our @EXPORT =
  qw(
	FD_CLOEXEC
	F_ALLOCSP
	F_ALLOCSP64
	F_COMPAT
	F_DUP2FD
	F_DUPFD
	F_EXLCK
	F_FREESP
	F_FREESP64
	F_FSYNC
	F_FSYNC64
	F_GETFD
	F_GETFL
	F_GETLK
	F_GETLK64
	F_GETOWN
	F_NODNY
	F_POSIX
	F_RDACC
	F_RDDNY
	F_RDLCK
	F_RWACC
	F_RWDNY
	F_SETFD
	F_SETFL
	F_SETLK
	F_SETLK64
	F_SETLKW
	F_SETLKW64
	F_SETOWN
	F_SHARE
	F_SHLCK
	F_UNLCK
	F_UNSHARE
	F_WRACC
	F_WRDNY
	F_WRLCK
	O_ACCMODE
	O_ALIAS
	O_APPEND
	O_ASYNC
	O_BINARY
	O_CREAT
	O_DEFER
	O_DIRECT
	O_DIRECTORY
	O_DSYNC
	O_EXCL
	O_EXLOCK
	O_LARGEFILE
	O_NDELAY
	O_NOCTTY
	O_NOFOLLOW
	O_NOINHERIT
	O_NONBLOCK
	O_RANDOM
	O_RAW
	O_RDONLY
	O_RDWR
	O_RSRC
	O_RSYNC
	O_SEQUENTIAL
	O_SHLOCK
	O_SYNC
	O_TEMPORARY
	O_TEXT
	O_TRUNC
	O_WRONLY
     );

# Other items we are prepared to export if requested
our @EXPORT_OK = (qw(
	DN_ACCESS
	DN_ATTRIB
	DN_CREATE
	DN_DELETE
	DN_MODIFY
	DN_MULTISHOT
	DN_RENAME
	F_ADD_SEALS
	F_GETLEASE
	F_GETPIPE_SZ
	F_GET_SEALS
	F_GETSIG
	F_NOTIFY
	F_SEAL_FUTURE_WRITE
	F_SEAL_GROW
	F_SEAL_SEAL
	F_SEAL_SHRINK
	F_SEAL_WRITE
	F_SETLEASE
	F_SETPIPE_SZ
	F_SETSIG
	LOCK_MAND
	LOCK_READ
	LOCK_RW
	LOCK_WRITE
        O_ALT_IO
        O_EVTONLY
	O_IGNORE_CTTY
	O_NOATIME
	O_NOLINK
        O_NOSIGPIPE
	O_NOTRANS
        O_SYMLINK
        O_TMPFILE
        O_TTY_INIT
), map {@{$_}} values %EXPORT_TAGS);

1;
</pre></body></html>