在Linux編程世界中,不可能沒聽過文件描述符這個概念,我們操縱任何設備的時候,幾乎都要通過它來達成的,它究竟是何方神聖呢?隨我描述符科學家來一探究竟。
首先,我們在Linux下打開文件用的都是如下代碼:
int fd = open(... ...);
當然有同學可能會說,有時也可以用fopen(),但是fopen()只是標準IO對系統IO的封裝,歸根結底還是使用open()來打開一個文件。
問題就在於這個“打開”,究竟打開意味着什麼呢? 很多人就想當然地以爲打開嘛,就跟在windows下雙擊一個文件,或者雙擊一個文件夾一樣,就是一個動作而已,其實不然,常說的打開一個文件實際上最重要的是獲取這個文件的描述符,描述符是用來表徵這個文件的代表物,下面的圖清晰地展示了這一點:
內核空間中有一堆數據結構表達一個文件的屬性信息,但是用戶空間看不見,只看見一個代表了這些信息的整數i,通常我們稱之爲文件描述符,對文件的讀寫和ioctl操作都是通過這個東東來達到的呢!