檔案描述字(file descriptor,fd)是系統中用來唯一記錄目前已經開啟的檔案的識別號,fd是一個整數。
除了file物件外,Python也提供對fd的操作,對fd的操作更為底層,fd和Python中的file物件是不同的概念。在介紹file物件時已經提過,呼叫 f.fileno() 可以得到一個檔案物件的fd,也可以在一個已有的 fd 上在封裝一個 file 物件:f = os.fdopen(fd)。
有些fd是一個在一個行程建立時事先指派好的:
##0-行程的stdin #1——進程的stdout2——進程的stderrPython中的os模組對於fd提供如下的方法:
1. 關閉fd
os.close(fd)
2. 複製fd
os.dup(fd)回傳一個新的fd1,這個fd1複製了參數fd。
3. 複製fd
os.dup2(fd, fd2)將 fd 複製到 fd2,如果 fd2 已經打開,則先關閉它。
4. 從fd 到file 物件
os.fdopen(fd, mode='r', bufsize=-1)傳回一個封裝了fd的Python file 對象,參數 mode 和 bufsize 和內建的open()函數中的對應參數意義相同。
5. 從fd 取得檔案的各種屬性
os.fstat(fd)傳回一個stat_result 類型的實例x,和os.stat(path)傳回的類型相同,只是這裡是透過一個fd 來獲得對應檔案的相關屬性。
6. 改變fd 對應檔的目前位置
os.lseek(fd, pos, how)效果同f.seek(pos, how),參數how 指定了參考點,共三種,分別是:os.SEEK_SET == 0 (檔案起始)、os.SEEK_CUR == 1(目前位置)和os.SEEK_END == 2(檔案結尾). 沒有類似 f.tell()這種,可以直接使用 fd 來獲得檔案目前位置的函數,實際上使用os.lseek() 就可以自己實作一個,
os.lseek(fd, 0, os.SEEK_CUR)就可以傳回目前fd 對應檔的位置,且不會對原文件造成影響。
7. 開啟文件,取得fd
os.open(file, flags, mode=0777
以上是python裡fd是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!