Согласно руководству fcntl, блокировка fcntl с start=0, len=0, откуда=2 должна блокировать диапазон байтов, начиная с конца файла (whence=2), со смещением 0 (start=0) до конца файла. (len=0), что, на мой взгляд, означает блокировку всего 0 байтов от EOF до EOF.
В этом случае я ожидаю, что блокировка с этими аргументами ничего не заблокирует. Однако, если я попытаюсь (используя оболочку python fcntl
), следующий код что-то блокирует, и вторая копия ожидает завершения первой:
f = open('some_file', 'a+')
fcntl.lockf(f, fcntl.LOCK_EX, 0, 0, 2)
print('got the lock')
time.sleep(100)
Точно так же работает и код с параметрами where=2, offset=100, len=0, даже те, в этом случае диапазон байтов задом наперед [EOF + 100, EOF].
Что я закрываю?