linux如何管理文件的偏移量

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 在打开文件表中拥有自己的偏移量,进程 B 也有自己的偏移量。在上面的情况下,进程 A 正在读取偏移量 12 处的文件,进程 B 正在读取偏移量 15 处的文件。

如果我是对的,现在我很困惑。

现在,如果我有一个进程,打开一个名为 的文件myfile,就会不断将字符串写入该文件。在某个时刻,我执行命令> myfile来清空文件。据我了解,该过程有其自己的偏移量,并且该过程> myfile有另一个偏移量。> myfile只改变了自己的偏移量,但是为什么写入过程在执行后现在开始在文件的开头写入字符串(现在偏移量等于0)> myfile

总之,写入进程如何知道执行后应该更改偏移量> myfile?是否有某种偏移同步机制?

答案1

总之,写入进程如何知道执行后应该更改偏移量> myfile

事实并非如此。文件偏移量不会因> myfile.

后续文件操作会发生什么情况取决于具体情况。read如果偏移量超出文件末尾,则返回 0。writeO_APPEND如果使用;打开文件,则将文件偏移量调整到文件末尾否则,写入会发生在请求的偏移处,即使这会导致向文件添加丢失的数据。

相关内容