2014-11-03 4 views

ответ

1

Короткие: Если вы хотите запретить это, вы должны обращаться с ним в драйвере.

Длинный: я не нашел никаких указаний в POSIX error codes of open(), которые предотвратили бы наличие нескольких ручек для одного и того же файла в том же процессе. Wikipedia states, что это хорошо:

и тот же файл может быть открыт одновременно несколькими процессами, и даже одним и тем же способом (в результате чего несколько дескрипторов файлов для того же самого файла) в зависимости от организации файла и файловой системы.

ПРЕДОХРАНИТЕЛЬ в it's documentation также не осуждает его; он часто просто проксирует семантику.

Чтобы попробовать, я дважды открыл тот же файл на 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 совместимые, так как он не определен, но может привести к нарушению предположения некоторых незнающий программист сделал.

+0

Отличный вклад. Спасибо за выполнение работы. –