Linux 文件对象是否是每个进程或系统范围的本地对象?

Linux 文件对象是否是每个进程或系统范围的本地对象?,linux,linux-kernel,operating-system,linux-device-driver,Linux,Linux Kernel,Operating System,Linux Device Driver,作为一名Linux设备驱动程序开发人员,我的想法是,文件对象是每个进程的本地结构,其地址在对应的fd的fd表中可用。但是当我看到Michale Kerrisk在Linux编程接口中的第5.6节时,它指出 引用同一打开文件描述共享的两个不同文件描述符 文件偏移量值。因此,如果通过一个文件描述符更改文件偏移量 (由于调用了read()、write()或lseek()),此更改是可见的 通过另一个文件描述符。当两个文件描述 任务大纲属于同一个过程,当它们属于不同的过程时 我很困惑……请有人帮助我提高理

作为一名Linux设备驱动程序开发人员,我的想法是,文件对象是每个进程的本地结构,其地址在对应的fd的fd表中可用。但是当我看到Michale Kerrisk在Linux编程接口中的第5.6节时,它指出

引用同一打开文件描述共享的两个不同文件描述符 文件偏移量值。因此,如果通过一个文件描述符更改文件偏移量 (由于调用了read()、write()或lseek()),此更改是可见的 通过另一个文件描述符。当两个文件描述 任务大纲属于同一个过程,当它们属于不同的过程时


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

每个进程都有自己的文件描述符表,并且每次打开一个文件()ed都会生成一个单独的文件描述。所以这里有理智

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

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