傳回檔案或目錄句柄的檔案描述符,如果檔案句柄未開啟,則傳回未定義。如果作業系統層級沒有真正的檔案描述符,例如使用 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)。