# fcntl - perldoc - phpman

    fcntl FILEHANDLE,FUNCTION,SCALAR
            Implements the [fcntl(2)](https://www.chedong.com/phpMan.php/man/fcntl/2/markdown) function. You'll probably have to say

                use Fcntl;

            first to get the correct constant definitions. Argument
            processing and value returned work just like "ioctl" below. For
            example:

                use Fcntl;
                my $flags = fcntl($filehandle, F_GETFL, 0)
                    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 "Argument "..." isn't numeric" warnings on improper
            numeric conversions.

            Note that "fcntl" raises an exception if used on a machine that
            doesn't implement [fcntl(2)](https://www.chedong.com/phpMan.php/man/fcntl/2/markdown). See the Fcntl module or your
            [fcntl(2)](https://www.chedong.com/phpMan.php/man/fcntl/2/markdown) 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);

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

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

            Portability issues: "fcntl" in perlport.

