Perl 5 version 24.3 documentation

fcntl

  • fcntl FILEHANDLE,FUNCTION,SCALAR

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

    1. use Fcntl;

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

    1. use Fcntl;
    2. my $flags = fcntl($filehandle, F_GETFL, 0)
    3. 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 return from the system call into "0 but true" in Perl. This string is true in boolean context and 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). 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.

    1. use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
    2. my $flags = fcntl($REMOTE, F_GETFL, 0)
    3. or die "Can't get flags for the socket: $!\n";
    4. fcntl($REMOTE, F_SETFL, $flags | O_NONBLOCK)
    5. or die "Can't set flags for the socket: $!\n";

    Portability issues: fcntl in perlport.