4

作为一名 Linux 设备驱动程序开发人员,我认为文件对象是每个进程的本地结构,并且它的地址在相应 fd 的 fd 表中可用。但是当我遇到Michale Kerrisk 在 Linux Programming interface中的第 5.6 节时,它指出

引用相同打开文件描述的两个不同文件描述符共享一个文件偏移值。因此,如果文件偏移量通过一个文件描述符更改(由于调用 read()、write() 或 lseek()),则此更改通过另一个文件描述符可见。这适用于两个文件描述符属于同一进程和它们属于不同进程的情况。

我很困惑......请有人帮助我提高理解力。

4

1 回答 1

5

每个进程都有自己的文件描述符表,每次open()编辑文件都会产生一个单独的文件描述。所以那里有理智!

例外情况是文件描述符在进程内(通过dup())或跨进程(通过一个进程fork()复制具有所有相同 FD 的副本,或通过通过 UNIX 域套接字传递文件描述符)复制文件描述符时。发生这种情况时,两个描述符最终会相互共享一些属性,包括偏移量。

这不一定是坏事。这意味着,例如,两个都写入共享文件描述符的进程最终不会覆盖彼此的输出。但是,它有时会产生意想不到的结果。但这通常不是你在不知情的情况下最终得到的。

于 2013-08-13T16:38:45.933 回答