fileno FILEHANDLE
fileno DIRHANDLE

返回文件句柄或目录句柄的文件描述符,如果文件句柄未打开,则返回未定义。如果在操作系统级别没有真实的文件描述符,例如通过使用引用作为第三个参数的 open 连接到内存对象的句柄,则返回 -1。

这主要用于构建用于 select 和低级 POSIX tty 处理操作的位图。如果 FILEHANDLE 是一个表达式,则该值被视为间接文件句柄,通常是其名称。

您可以使用它来确定两个句柄是否引用同一个底层描述符

if (fileno($this) != -1 && fileno($this) == fileno($that)) {
    print "\$this and \$that are dups\n";
} elsif (fileno($this) != -1 && fileno($that) != -1) {
    print "\$this and \$that have different " .
        "underlying file descriptors\n";
} else {
    print "At least one of \$this and \$that does " .
        "not have a real file descriptor\n";
}

目录句柄的 fileno 行为取决于操作系统。在支持 dirfd(3) 或类似功能的系统上,目录句柄的 fileno 返回与句柄关联的底层文件描述符;在不支持此功能的系统上,它返回未定义的值,并设置 $!(errno)。