作为Linux设备驱动程序开发人员,我认为文件对象是每个进程的本地结构,并且其地址在fd表中可用于相应的fd。但当我在Michale Kerrisk的 Linux编程接口中遇到第5.6节时指出
两个不同的文件描述符,它们引用相同的打开文件描述共享 文件偏移值。因此,如果通过一个文件描述符更改文件偏移量 (作为调用read(),write()或lseek())的结果,此更改是可见的 通过其他文件描述符。这适用于两个文件描述时 tors属于同一个进程,属于不同的进程。
我很困惑......请帮助我提高理解力。
答案 0 :(得分:5)
每个进程都有自己的文件描述符表,每次文件open()
时都会生成一个单独的文件描述。那里有理智!
例外情况是文件描述符在进程内(通过dup()
)或跨进程(通过一个进程fork()
复制所有相同的FD,或通过通过UNIX域套接字的文件描述符)。当发生这种情况时,两个描述符最终会相互共享一些属性,包括偏移量。
这不一定是坏事。这意味着,例如,两个写入共享文件描述符的进程最终都不会覆盖彼此的输出。但它有时会产生意想不到的结果。但是,如果不了解它,通常不会出现这种情况。