Unix內核中打開文件的表示

 Unix內核中已經打開文件,經過三種數據結構表示:node

  1. 每一個進程的進程表中的記錄項,包含打開的文件的文件描述符表,與之關聯的是:
    • 文件描述符標識
    • 指向一個文件表項的指針
  2. 內核爲全部打開文件維持一張文件表,每一個文件表項表明一個打開文件,包含:
    • 文件狀態標識(讀、寫、添加、同步、非阻塞等
    • 當前文件偏移量
    • 指向該文件v節點表項的指針

3. 每一個打開文件都有且只有一個V節點(v-node)結構linux

    • 文件類型
    • 對此文件進行各類操做的函數的指針
    • (大多數文件)該文件的i節點(i-node,索引節點)

  一個打開的文件的結構以下圖所示:數據結構

 

這些信息都是打開文件時從磁盤讀入內存的函數

 

爲何要有V節點結構呢?對在一個計算機系統上的多文件系統類型提供支持。也稱之爲虛擬文件系統(因此v-node中的v指的是virtual?)linux沒有將相關數據結構分爲i-node和v-node,而是採用了一個獨立於文件系統的i節點和一個依賴於文件系統的i節點spa

 

每一個進程都只有本身的進程表項,故而每一個進程都有本身的文件表項,可是文件能夠被多個進程各自打開而每一個打開文件都有且只有一個V節點表,因而會有多個文件表項指向同一個V節點表的狀況。指針

而爲何每一個進程都有本身的文件表項而不是每一個打開文件都只有一個文件表項呢?首先要知道文件表中的當前文件偏移量指的是每次write以後表示增長縮寫的字節數,因此每一個進程對應一個文件表保證了每一個進程都有本身對該文件的當前偏移量。blog

相關文章
相關標籤/搜索