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

作为Linux设备驱动程序开发人员,我认为文件对象是每个进程的本地结构,并且其地址在fd表中可用于相应的fd.但当我在Michale Kerrisk的Linux编程界面中遇到5.6节时说明了这一点

Two different file descriptors that refer to the same open file description share
a file offset value. Therefore, if the file offset is changed via one file descriptor
(as a consequence of calls to read(), write(), or lseek()), this change is visible
through the other file descriptor. This applies both when the two file descrip
tors belong to the same process and when they belong to different processes.

我被迷惑了…请帮助我提高理解力.

最佳答案
每个进程都有自己的文件描述符表,每次打开文件()时都会生成一个单独的文件描述.那里有理智!

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

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

转载注明原文:linux – 每个进程或系统范围内的文件对象是本地的吗? - 代码日志