Files
linux如何管理文件的偏移量
看完這篇文章: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
否則,寫入發生在請求的偏移量處,即使這會導致將失去的數據添加到文件中。