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-совместимым, поскольку он не указан, но может нарушить предположение, сделанное неведомым программистом.

Другие вопросы по тегам