OS / VFS / FUSE层是否管理同一文件的多个句柄的语义,还是驱动程序必须仲裁的东西?
答案 0 :(得分:1)
简短:如果你想禁止它,你必须在驱动程序中处理它。
Long:我没有在POSIX error codes of open()中发现任何可能阻止在同一进程中为同一文件设置多个句柄的指示。 Wikipedia states这很好:
同一个文件可能由多个进程同时打开,甚至可能由同一个进程打开(导致同一文件有多个文件描述符),具体取决于文件组织和文件系统。
{{}}}中的FUSE也没有谴责它;它通常只代表语义。
为了尝试它,我在Python中打开了两次相同的文件,并获得了两个不同的文件描述符。
In [1]: fd1 = open("./resting.org")
In [2]: fd2 = open("./resting.org")
In [3]: fd1.fileno()
Out[3]: 5
In [4]: fd2.fileno()
Out[4]: 6
所以,你必须自己预防它,可能保持POSIX兼容,因为它没有指定,但可能违反一些不知情的程序员做出的假设。