fcntl 也可能指代模块:Fcntl
fcntl FILEHANDLE,FUNCTION,SCALAR

实现 fcntl(2) 函数。你可能需要先说

use Fcntl;

来获取正确的常量定义。参数处理和返回值的工作方式与下面的 ioctl 相同。例如

use Fcntl;
my $flags = fcntl($filehandle, F_GETFL, 0)
    or die "Can't fcntl F_GETFL: $!";

你不需要检查 defined 是否在 fcntl 的返回值上定义。与 ioctl 一样,它将系统调用返回的 0 映射到 Perl 中的 "0 但为真"。此字符串在布尔上下文中为真,在数字上下文中为 0。它也免受正常 Argument "..." isn't numeric 警告 的影响,这些警告会出现在不正确的数字转换中。

请注意,如果在没有实现 fcntl(2) 的机器上使用 fcntl,它会引发异常。请参阅 Fcntl 模块或你的 fcntl(2) 手册页,了解你的系统上有哪些可用函数。

以下是如何将名为 $REMOTE 的文件句柄设置为在系统级别非阻塞的示例。不过,你必须自己协商 $|

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";

可移植性问题:"fcntl" in perlport.