Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > блокировка доступа к файлу fcntl


Автор: optix 7.12.2007, 14:03
Код

import fcntl, time

f = open("test", "w")
fcntl.lockf(f, fcntl.LOCK_EX)
f.write( str(time.time()) + "\n" )
time.sleep(10)
fcntl.lockf(f, fcntl.LOCK_UN)
f.close()


Запускаю это скрипт. Должна поставиться блокировка файл test на 10 сек. В это время открываю питон:
Код

>>> f=open("test")
>>> f
<open file 'test', mode 'r' at 0xb7d4d698>
>>> 

Никаких ошибок не выдает.
Блокировка не работает? Что делаю не правильно?


И второй ворос. Где можно посмотреть что означаю все эти константы? ( взято из help(fcntl) ) В документации оп питону не нашел. 
Цитата

DN_ACCESS = 1
DN_ATTRIB = 32
DN_CREATE = 4
DN_DELETE = 8
DN_MODIFY = 2
DN_MULTISHOT = -2147483648
DN_RENAME = 16
FD_CLOEXEC = 1
F_DUPFD = 0
F_EXLCK = 4
F_GETFD = 1
F_GETFL = 3
F_GETLEASE = 1025
F_GETLK = 12
F_GETLK64 = 12
F_GETOWN = 9
F_GETSIG = 11
F_NOTIFY = 1026
F_RDLCK = 0
F_SETFD = 2
F_SETFL = 4
F_SETLEASE = 1024
F_SETLK = 13
F_SETLK64 = 13
F_SETLKW = 14
F_SETLKW64 = 14
F_SETOWN = 8
F_SETSIG = 10
F_SHLCK = 8
F_UNLCK = 2
F_WRLCK = 1
I_ATMARK = 21279
I_CANPUT = 21282
I_CKBAND = 21277
I_FDINSERT = 21264
I_FIND = 21259
I_FLUSH = 21253
I_FLUSHBAND = 21276
I_GETBAND = 21278
I_GETCLTIME = 21281
I_GETSIG = 21258
I_GRDOPT = 21255
I_GWROPT = 21268
I_LINK = 21260
I_LIST = 21269
I_LOOK = 21252
I_NREAD = 21249
I_PEEK = 21263
I_PLINK = 21270
I_POP = 21251
I_PUNLINK = 21271
I_PUSH = 21250
I_RECVFD = 21262
I_SENDFD = 21265
I_SETCLTIME = 21280
I_SETSIG = 21257
I_SRDOPT = 21254
I_STR = 21256
I_SWROPT = 21267
I_UNLINK = 21261
LOCK_EX = 2
LOCK_MAND = 32
LOCK_NB = 4
LOCK_READ = 64
LOCK_RW = 192
LOCK_SH = 1
LOCK_UN = 8
LOCK_WRITE = 128

Автор: turist 7.12.2007, 17:19
man 2 flock:
Цитата

flock - установить или снять advisory блокировку на открытый файл


Ключевое слово тут advisory, то есть никто вам никаких ошибок не выдаст, если только вы не спросите вежлово, "а можно ли мне это".

Цитата

EWOULDBLOCK
              Файл блокирован и был выбран флаг LOCK_NB

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)