读完这篇文章后: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 在打开文件表中拥有自己的偏移量,进程 B 也有自己的偏移量。在上面的情况下,进程 A 正在读取偏移量 12 处的文件,进程 B 正在读取偏移量 15 处的文件。
如果我是对的,现在我很困惑。
现在,如果我有一个进程,打开一个名为 的文件myfile
,就会不断将字符串写入该文件。在某个时刻,我执行命令> myfile
来清空文件。据我了解,该过程有其自己的偏移量,并且该过程> myfile
有另一个偏移量。> myfile
只改变了自己的偏移量,但是为什么写入过程在执行后现在开始在文件的开头写入字符串(现在偏移量等于0)> myfile
?
总之,写入进程如何知道执行后应该更改偏移量> myfile
?是否有某种偏移同步机制?