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

时间:2013-08-13 16:11:06

标签: linux linux-kernel operating-system linux-device-driver

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

  

两个不同的文件描述符,它们引用相同的打开文件描述共享   文件偏移值。因此,如果通过一个文件描述符更改文件偏移量   (作为调用read(),write()或lseek())的结果,此更改是可见的   通过其他文件描述符。这适用于两个文件描述时   tors属于同一个进程,属于不同的进程。

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

1 个答案:

答案 0 :(得分:5)

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

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

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