第五章 文件系統的系統調用

文件描述符表、文件表、索引節點表

文件描述符:用於內核訪問文件,打開或者新建文件時,會返回一個文件描述符,內核使用文件描述符訪問文件
分配原則:最小分配
取值範圍:非負整數,0~MAX-1 其中默認是0、1、2用於系統標準輸入、標準輸出、標準錯誤

系統調用open

系統調用open是進程要存取一個文件中的數據所必須採取的第一步,因爲只有通過系統調用open才能返回對應的文件描述符。文件描述符標誌特定進程正在訪問的文件。每運行一個進程,內核會默認爲其打開三個進程描述符,0:標準輸入,1:標準輸出,2:標準錯誤。

fd=open(pathname,flags,modes);

例如

int fd = open("/Users/hupac/Public/k.c", 0666, O_RDWR);

其中pathname爲路徑名,0666爲訪問權限,O_RDWR給出文件的訪問許可權,這裏是僅讀寫。由代碼可見,open系統調用返回的整數稱爲文件描述符。其他與文件操作相關的系統調用如讀read,寫write,定位lseek都要使用系統調用open返回的文件描述符。
open系統調用過程:

  1. 內核用算法namei在文件系統中查找文件名參數。若文件不存在或不允許存取,則返回錯誤。
  2. 內核找到內存中的索引節點後,它檢查打開文件的許可權,然後爲該文件在文件表中分配一個表項,設置引用數+1和文件內部偏移量。
    文件表中存放着文件中的字節偏移量和指向文件索引節點的指針。
  3. 內核分配用戶文件描述符表項,將指針指向文件表項。
  4. 最後返回文件描述符。
    每個open調用都導致用戶描述符表和內核文件表中分配一個唯一表項,但在內核的內存索引節點表中,對每個文件只有一個表項。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章