FUSE: несколько открываются в одном файле
Управляет ли уровень OS/VFS/FUSE семантикой нескольких дескрипторов одного и того же файла, или это то, что драйвер должен обрабатывать?
1 ответ
Коротко: если вы хотите запретить это, вы должны обработать это в драйвере.
Долго: я не нашел никаких указаний в кодах ошибок POSIX open(), которые бы мешали иметь несколько дескрипторов для одного и того же файла в одном и том же процессе. Википедия утверждает, что это хорошо:
Один и тот же файл может быть открыт одновременно несколькими процессами и даже одним и тем же процессом (что приводит к нескольким файловым дескрипторам для одного и того же файла) в зависимости от организации файла и файловой системы.
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-совместимым, поскольку он не указан, но может нарушить предположение, сделанное неведомым программистом.