Linux文件系統之文件描述符與讀寫指針
linux文件描述符讀寫指針並行讀文件
上圖為 Linux VFS 系統的簡單圖示
每個進程在進程控制塊(PCB)中都保存著一份文件描述符表,文件描述符即是這個表的索引,每個表項都指向一個已打開文件,即上圖的 file 結構體。
file 結構體中維護著文件狀態標志以及讀寫指針,所以說即使不同的文件描述符都代表同一個文件,只要 file 結構體不同,便可以各自獨立的進行讀操作,因為它們使用的是不同的讀寫指針。
那麼有沒有不同的文件描述符使用同一個 file 結構體呢?答案是肯定的,使用 Linux 中的 dup 或 dup2 系統調用即可復制文件描述符,這樣便可以使兩個文件描述符指向同一個 file 結構體。這時,如果使用這兩個文件描述符進行的讀操作是不獨立的。
假設 fd1 和 fd2 兩個文件描述符都指向同一個 file 結構體,當使用 close 系統調用關閉 fd1後, fd2 仍可以使用。這是因為在 file 結構體中還維護者一個引用計數 count,當 close(fd1) 後,count 減 1,只有在 count 為 0 時,內核才會真正的釋放 file 結構體真正關閉文件。