fcntl - file control system call

- NAME
- SYNOPSIS
- DESCRIPTION

# NAME

fcntl - file control system call

# SYNOPSIS

fcntl FILEHANDLE,FUNCTION,SCALAR

# DESCRIPTION

Implements the `fcntl(2)` function. You'll probably have to say

        use Fcntl;

first to get the correct constant definitions. Argument processing and value return works just like `ioctl` below. For example:

        use Fcntl;
        fcntl($filehandle, F_GETFL, $packed_return_buffer)
            or die "can't fcntl F_GETFL: $!";

You don't have to check for `defined` on the return from `fcntl`. Like `ioctl`, it maps a `0` return from the system call into `"0 but true"` in Perl. This string is true in boolean context and `0` in numeric context. It is also exempt from the normal -w warnings on improper numeric conversions.

Note that `fcntl` will produce a fatal error if used on a machine that doesn't implement fcntl(2). See the Fcntl module or your `fcntl(2)` manpage to learn what functions are available on your system.

Here's an example of setting a filehandle named `REMOTE` to be non-blocking at the system level. You'll have to negotiate `$|` on your own, though.

        use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);

        $flags = fcntl(REMOTE, F_GETFL, 0)
                    or die "Can't get flags for the socket: $!\n";

        $flags = fcntl(REMOTE, F_SETFL, $flags | O_NONBLOCK)
                    or die "Can't set flags for the socket: $!\n";

fcntl - file control system call