Files

linux如何管理文件的偏移量

  • November 12, 2020

看完這篇文章:https ://stackoverflow.com/questions/14189944/unix-system-file-tables ,我基本了解了Linux是如何管理文件的。

但我不知道如何管理文件的偏移量。

據我了解,打開文件表中的一個元素(一行)保持自己的偏移量。例如,我有兩個程序 A 和 B,它們正在讀取同一個文件。所以我認為情況應該如下:

                     Open File Table
____________            ______________
| processA |            | offset: 12 | ------\
|   fdA    | ---------> |------------|        \         INode Table
|----------|                                   \______  ___________
                                              /        |  file   |
____________            ______________        /         |---------|
| processB |            | offset: 15 | ------/
|   fdB    | ---------> |------------|
|----------|

因此,程序 A 在 Open File Table 中有自己的偏移量,程序 B 也是如此。在上述情況下,程序 A 正在讀取偏移量 12 處的文件,程序 B 正在讀取偏移量 15 處的文件。

如果我是對的,那麼我現在很困惑。

現在,如果我有一個程序,打開一個名為 的文件myfile,會不斷將字元串寫入文件。在某個時刻,我執行命令> myfile來清空文件。據我了解,程序有自己的偏移量,而程序> myfile有另一個偏移量。> myfile只是改變了自己的偏移量,但是為什麼現在寫入過程執行後開始在文件開頭寫入字元串(現在偏移量等於0)> myfile

一句話,寫程序怎麼知道執行後要改變偏移量> myfile?是否有一些偏移同步機制?

一句話,寫程序怎麼知道執行後要改變偏移量> myfile

它沒有。文件偏移量不會因為> myfile.

後續文件操作會發生什麼取決於具體情況。read如果偏移量超過文件末尾,則返回 0。如果使用;write打開文件,則將文件偏移量調整到文件末尾 O_APPEND否則,寫入發生在請求的偏移量處,即使這會導致將失去的數據添加到文件中。

引用自:https://unix.stackexchange.com/questions/619186