首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Linux 文件描述符詳解:概念、特性與 Windows 句柄對比

     編輯:程式設計綜合問答

什麼是文件描述符?

在 Linux/Unix 系統中,文件描述符 是一個非負整數,用於標識進程打開的文件、Socket、管道等 I/O 資源。每個進程預設擁有三個標準描述符:

  • 0 – 標準輸入
  • 1 – 標準輸出
  • 2 – 標準錯誤

後續打開的文件依次分配 3、4、5… 系統會限制每個進程可同時打開的描述符數量(可透過 ulimit -n 查看/調整)。

文件描述符包含什麼資訊?

文件描述符本身只是一個索引,指向進程內核中的 文件描述符表。每個表項包含:

  • 指向 打開文件表 項的指針(包含文件狀態標誌、當前偏移量、v-node 指針等)
  • 文件描述符標誌(如 FD_CLOEXEC)

因此,描述符不直接包含文件地址或狀態,而是透過內核數據結構間接關聯。

與 Windows 句柄的對比

Windows 的 句柄 同樣是不透明的整數值,用於標識內核對象(文件、線程、互斥體等)。兩者概念相似,但實現細節不同:

特性Linux 文件描述符Windows 句柄
類型非負整數指針大小的無符號整數
範圍0 起始,進程私有系統全域唯一,進程間可繼承/複製
底層結構文件描述符表 → 打開文件表 → v-node對象管理器 → 內核對象
關閉方式close(fd)CloseHandle(h)

常見操作

  • open() / creat() – 獲取新描述符
  • read() / write() – 數據傳輸
  • fcntl() – 修改描述符屬性(如設定非阻塞、FD_CLOEXEC)
  • dup() / dup2() – 複製描述符
  • close() – 釋放描述符

參考資源

更深入的內核視角可參考:Linux 文件描述符原理分析

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved