posixfile.md
1> **Источник:** https://python-all.ru/2.7/library/posixfile.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 36.12. [`posixfile`](https://python-all.ru/2.7/library/posixfile.html#module-posixfile) – Объекты, похожие на файлы, с поддержкой блокировки89Устарело с версии 1.5: Операция блокировки, предоставляемая этим модулем, выполняется лучше и более портативно с помощью вызова [`fcntl.lockf()`](https://python-all.ru/2.7/library/fcntl.html#fcntl.lockf).1011Этот модуль реализует дополнительную функциональность поверх встроенных файловых объектов. В частности, он реализует блокировку файлов, управление флагами файла и простой интерфейс для дублирования файлового объекта. Модуль определяет новый файловый объект – объект posixfile. Он обладает всеми стандартными методами файловых объектов и добавляет описанные ниже методы. Этот модуль работает только в некоторых вариантах Unix, поскольку использует [`fcntl.fcntl()`](https://python-all.ru/2.7/library/fcntl.html#fcntl.fcntl) для блокировки файлов.1213Для создания экземпляра объекта posixfile используйте функцию [`posixfile.open()`](https://python-all.ru/2.7/library/posixfile.html#posixfile.open). Полученный объект внешне и по поведению примерно соответствует стандартному файловому объекту.1415Модуль [`posixfile`](https://python-all.ru/2.7/library/posixfile.html#module-posixfile) определяет следующие константы:1617#### `posixfile.SEEK_SET`1819Смещение вычисляется от начала файла.2021#### `posixfile.SEEK_CUR`2223Смещение вычисляется от текущей позиции в файле.2425#### `posixfile.SEEK_END`2627Смещение вычисляется от конца файла.2829Модуль [`posixfile`](https://python-all.ru/2.7/library/posixfile.html#module-posixfile) определяет следующие функции:3031#### `posixfile.open(filename[, mode[, bufsize]])`3233Создаёт новый объект posixfile с заданными именем файла и режимом. Аргументы *имя\_файла*, *режим* и *размер\_буфера* интерпретируются так же, как встроенной функцией [`open()`](https://python-all.ru/2.7/library/functions.html#open).3435#### `posixfile.fileopen(fileobject)`3637Создаёт новый объект posixfile на основе заданного стандартного файлового объекта. Полученный объект имеет то же имя файла и режим, что и исходный файловый объект.3839Объект posixfile определяет следующие дополнительные методы:4041#### `posixfile.lock(fmt[, len[, start[, whence]]])`4243Блокирует указанный участок файла, на который ссылается файловый объект. Формат описан ниже в таблице. Аргумент *длина* задаёт длину блокируемого участка. По умолчанию `0`. *начало* задаёт начальное смещение участка; по умолчанию `0`. Аргумент *откуда* указывает, относительно чего вычисляется смещение. Он принимает одну из констант [`SEEK_SET`](https://python-all.ru/2.7/library/posixfile.html#posixfile.SEEK_SET), [`SEEK_CUR`](https://python-all.ru/2.7/library/posixfile.html#posixfile.SEEK_CUR) или [`SEEK_END`](https://python-all.ru/2.7/library/posixfile.html#posixfile.SEEK_END). По умолчанию [`SEEK_SET`](https://python-all.ru/2.7/library/posixfile.html#posixfile.SEEK_SET). Дополнительную информацию об аргументах см. в справочной странице *fcntl(2)* вашей системы.4445#### `posixfile.flags([flags])`4647Устанавливает указанные флаги для файла, на который ссылается файловый объект. Новые флаги объединяются по OR со старыми, если не указано иное. Формат описан ниже в таблице. Если аргумент *флаги* не указан, возвращается строка с текущими флагами (это эквивалентно модификатору `?`). Дополнительную информацию о флагах см. в справочной странице *fcntl(2)* вашей системы.4849#### `posixfile.dup()`5051Дублирует файловый объект, а также связанные с ним файловый указатель и файловый дескриптор. Полученный объект ведёт себя так, как если бы он был открыт заново.5253#### `posixfile.dup2(fd)`5455Дублирует файловый объект, а также связанные с ним файловый указатель и файловый дескриптор. Новый объект будет использовать заданный файловый дескриптор. В остальном полученный объект ведёт себя так, как если бы он был открыт заново.5657#### `posixfile.file()`5859Возвращает стандартный файловый объект, на котором основан объект posixfile. Это иногда необходимо для функций, которые требуют стандартный файловый объект.6061Все методы возбуждают [`IOError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.IOError) при неудаче запроса.6263Символы формата для метода `lock()` имеют следующие значения:6465| Формат | Значение |66| --- | --- |67| `u` | разблокировать указанную область |68| `r` | запросить блокировку чтения для указанного участка |69| `w` | запросить блокировку записи для указанного участка |7071Кроме того, к формату можно добавить следующие модификаторы:7273| Модификатор | Значение | Примечания |74| --- | --- | --- |75| `\|` | ожидать, пока блокировка не будет предоставлена | |76| `?` | возвращает первую блокировку, конфликтующую с запрошенной блокировкой, или `None`, если конфликта нет. | (1) |7778Примечание:79801. Возвращаемая блокировка имеет формат `(mode, len, start, whence, pid)`, где *режим* – символ, представляющий тип блокировки ('r' или 'w'). Этот модификатор предотвращает предоставление запроса; он предназначен только для запроса информации.8182Символы формата для метода `flags()` имеют следующие значения:8384| Формат | Значение |85| --- | --- |86| `a` | флаг только добавления |87| `c` | флаг закрытия при exec |88| `n` | флаг без задержки (также называется неблокирующим флагом) |89| `s` | флаг синхронизации |9091Кроме того, в формат можно добавить следующие модификаторы:9293| Модификатор | Значение | Примечания |94| --- | --- | --- |95| `!` | отключает указанные флаги ‘off’, вместо ‘on’ по умолчанию | (1) |96| `=` | заменяет флаги, вместо стандартной операции ‘OR’ | (1) |97| `?` | возвращает строку, в которой символы представляют установленные флаги. | (2) |9899Примечания:1001011. Модификаторы `!` и `=` являются взаимоисключающими.1022. Эта строка представляет флаги после того, как они могли быть изменены тем же вызовом.103104Примеры:105106```python107import posixfile108109file = posixfile.open('testfile', 'w')110file.lock('w|')111...112file.lock('u')113file.close()114```115