Документация Python неофициальный перевод

36.12. posixfile – Объекты, похожие на файлы, с поддержкой блокировкиposixfile – File-like objects with locking support

Устарело с версии 1.5: Операция блокировки, предоставляемая этим модулем, выполняется лучше и более портативно с помощью вызова fcntl.lockf().

Этот модуль реализует дополнительную функциональность поверх встроенных файловых объектов. В частности, он реализует блокировку файлов, управление флагами файла и простой интерфейс для дублирования файлового объекта. Модуль определяет новый файловый объект – объект posixfile. Он обладает всеми стандартными методами файловых объектов и добавляет описанные ниже методы. Этот модуль работает только в некоторых вариантах Unix, поскольку использует fcntl.fcntl() для блокировки файлов.

Для создания экземпляра объекта posixfile используйте функцию posixfile.open(). Полученный объект внешне и по поведению примерно соответствует стандартному файловому объекту.

Модуль posixfile определяет следующие константы:

posixfile.SEEK_SET

Смещение вычисляется от начала файла.

posixfile.SEEK_CUR

Смещение вычисляется от текущей позиции в файле.

posixfile.SEEK_END

Смещение вычисляется от конца файла.

Модуль posixfile определяет следующие функции:

posixfile.open(filename[, mode[, bufsize]])

Создаёт новый объект posixfile с заданными именем файла и режимом. Аргументы имя_файла, режим и размер_буфера интерпретируются так же, как встроенной функцией open().

posixfile.fileopen(fileobject)

Создаёт новый объект posixfile на основе заданного стандартного файлового объекта. Полученный объект имеет то же имя файла и режим, что и исходный файловый объект.

Объект posixfile определяет следующие дополнительные методы:

posixfile.lock(fmt[, len[, start[, whence]]])

Блокирует указанный участок файла, на который ссылается файловый объект. Формат описан ниже в таблице. Аргумент длина задаёт длину блокируемого участка. По умолчанию 0. начало задаёт начальное смещение участка; по умолчанию 0. Аргумент откуда указывает, относительно чего вычисляется смещение. Он принимает одну из констант SEEK_SET, SEEK_CUR или SEEK_END. По умолчанию SEEK_SET. Дополнительную информацию об аргументах см. в справочной странице fcntl(2) вашей системы.

posixfile.flags([flags])

Устанавливает указанные флаги для файла, на который ссылается файловый объект. Новые флаги объединяются по OR со старыми, если не указано иное. Формат описан ниже в таблице. Если аргумент флаги не указан, возвращается строка с текущими флагами (это эквивалентно модификатору ?). Дополнительную информацию о флагах см. в справочной странице fcntl(2) вашей системы.

posixfile.dup()

Дублирует файловый объект, а также связанные с ним файловый указатель и файловый дескриптор. Полученный объект ведёт себя так, как если бы он был открыт заново.

posixfile.dup2(fd)

Дублирует файловый объект, а также связанные с ним файловый указатель и файловый дескриптор. Новый объект будет использовать заданный файловый дескриптор. В остальном полученный объект ведёт себя так, как если бы он был открыт заново.

posixfile.file()

Возвращает стандартный файловый объект, на котором основан объект posixfile. Это иногда необходимо для функций, которые требуют стандартный файловый объект.

Все методы возбуждают IOError при неудаче запроса.

Символы формата для метода lock() имеют следующие значения:

Формат

Значение

u

разблокировать указанную область

r

запросить блокировку чтения для указанного участка

w

запросить блокировку записи для указанного участка

Кроме того, к формату можно добавить следующие модификаторы:

Модификатор

Значение

Примечания

|

ожидать, пока блокировка не будет предоставлена

?

возвращает первую блокировку, конфликтующую с запрошенной блокировкой, или None, если конфликта нет.

(1)

Примечание:

  1. Возвращаемая блокировка имеет формат (mode, len, start, whence, pid), где режим – символ, представляющий тип блокировки ('r' или 'w'). Этот модификатор предотвращает предоставление запроса; он предназначен только для запроса информации.

Символы формата для метода flags() имеют следующие значения:

Формат

Значение

a

флаг только добавления

c

флаг закрытия при exec

n

флаг без задержки (также называется неблокирующим флагом)

s

флаг синхронизации

Кроме того, в формат можно добавить следующие модификаторы:

Модификатор

Значение

Примечания

!

отключает указанные флаги ‘off’, вместо ‘on’ по умолчанию

(1)

=

заменяет флаги, вместо стандартной операции ‘OR’

(1)

?

возвращает строку, в которой символы представляют установленные флаги.

(2)

Примечания:

  1. Модификаторы ! и = являются взаимоисключающими.

  2. Эта строка представляет флаги после того, как они могли быть изменены тем же вызовом.

Примеры:

import posixfile

file = posixfile.open('testfile', 'w')
file.lock('w|')
...
file.lock('u')
file.close()