Fcntl
loads the constants defined in the system’s <fcntl.h> C header file, and used with both the fcntl(2) and open(2) POSIX system calls.
To perform a fcntl(2) operation, use IO::fcntl.
To perform an open(2) operation, use IO::sysopen
.
The set of operations and constants available depends upon specific operating system. Some values listed below may not be supported on your system.
See your fcntl(2) man page for complete details.
Open /tmp/tempfile as a write-only file that is created if it doesn’t exist:
require 'fcntl' fd = IO.sysopen('/tmp/tempfile', Fcntl::O_WRONLY | Fcntl::O_EXCL | Fcntl::O_CREAT) f = IO.open(fd) f.syswrite("TEMP DATA") f.close
Get the flags on file s
:
m = s.fcntl(Fcntl::F_GETFL, 0)
Set
the non-blocking flag on f
in addition to the existing flags in m
.
f.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK|m)
Duplicate a file descriptor to the minimum unused file descriptor greater than or equal to the argument.
The close-on-exec flag of the duplicated file descriptor is set. (Ruby uses F_DUPFD_CLOEXEC internally if available to avoid race condition. F_SETFD
is used if F_DUPFD_CLOEXEC is not available.)
Determine whether a given region of a file is locked. This uses one of the F_*LK flags.
Acquire a lock on a region of a file, waiting if necessary. This uses one of the F_*LCK flags
the value of the close-on-exec flag.
Change the capacity of the pipe referred to by fd to be at least arg bytes.
Return (as the function result) the capacity of the pipe referred to by fd.
Open the file in non-blocking mode
It is a FreeBSD specific constant and acts similarly as F_DUP2FD
but set the FD_CLOEXEC
flag in addition.