返回文件句柄或目录句柄的文件描述符,如果文件句柄未打开,则返回未定义。如果在操作系统级别没有真实的文件描述符,例如通过使用引用作为第三个参数的 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)。