| :mod:`posixfile` --- File-like objects with locking support | |
| =========================================================== | |
| .. module:: posixfile | |
| :platform: Unix | |
| :synopsis: A file-like object with support for locking. | |
| :deprecated: | |
| .. moduleauthor:: Jaap Vermeulen | |
| .. sectionauthor:: Jaap Vermeulen | |
| .. index:: pair: POSIX; file object | |
| .. deprecated:: 1.5 | |
| The locking operation that this module provides is done better and more portably | |
| by the :func:`fcntl.lockf` call. | |
| .. index:: single: fcntl() (in module fcntl) | |
| This module implements some additional functionality over the built-in file | |
| objects. In particular, it implements file locking, control over the file | |
| flags, and an easy interface to duplicate the file object. The module defines a | |
| new file object, the posixfile object. It has all the standard file object | |
| methods and adds the methods described below. This module only works for | |
| certain flavors of Unix, since it uses :func:`fcntl.fcntl` for file locking. | |
| To instantiate a posixfile object, use the :func:`posixfile.open` function. The | |
| resulting object looks and feels roughly the same as a standard file object. | |
| The :mod:`posixfile` module defines the following constants: | |
| .. data:: SEEK_SET | |
| Offset is calculated from the start of the file. | |
| .. data:: SEEK_CUR | |
| Offset is calculated from the current position in the file. | |
| .. data:: SEEK_END | |
| Offset is calculated from the end of the file. | |
| The :mod:`posixfile` module defines the following functions: | |
| .. function:: open(filename[, mode[, bufsize]]) | |
| Create a new posixfile object with the given filename and mode. The *filename*, | |
| *mode* and *bufsize* arguments are interpreted the same way as by the built-in | |
| :func:`open` function. | |
| .. function:: fileopen(fileobject) | |
| Create a new posixfile object with the given standard file object. The resulting | |
| object has the same filename and mode as the original file object. | |
| The posixfile object defines the following additional methods: | |
| .. method:: posixfile.lock(fmt, [len[, start[, whence]]]) | |
| Lock the specified section of the file that the file object is referring to. | |
| The format is explained below in a table. The *len* argument specifies the | |
| length of the section that should be locked. The default is ``0``. *start* | |
| specifies the starting offset of the section, where the default is ``0``. The | |
| *whence* argument specifies where the offset is relative to. It accepts one of | |
| the constants :const:`SEEK_SET`, :const:`SEEK_CUR` or :const:`SEEK_END`. The | |
| default is :const:`SEEK_SET`. For more information about the arguments refer to | |
| the :manpage:`fcntl(2)` manual page on your system. | |
| .. method:: posixfile.flags([flags]) | |
| Set the specified flags for the file that the file object is referring to. The | |
| new flags are ORed with the old flags, unless specified otherwise. The format | |
| is explained below in a table. Without the *flags* argument a string indicating | |
| the current flags is returned (this is the same as the ``?`` modifier). For | |
| more information about the flags refer to the :manpage:`fcntl(2)` manual page on | |
| your system. | |
| .. method:: posixfile.dup() | |
| Duplicate the file object and the underlying file pointer and file descriptor. | |
| The resulting object behaves as if it were newly opened. | |
| .. method:: posixfile.dup2(fd) | |
| Duplicate the file object and the underlying file pointer and file descriptor. | |
| The new object will have the given file descriptor. Otherwise the resulting | |
| object behaves as if it were newly opened. | |
| .. method:: posixfile.file() | |
| Return the standard file object that the posixfile object is based on. This is | |
| sometimes necessary for functions that insist on a standard file object. | |
| All methods raise :exc:`IOError` when the request fails. | |
| Format characters for the :meth:`lock` method have the following meaning: | |
| +--------+-----------------------------------------------+ | |
| | Format | Meaning | | |
| +========+===============================================+ | |
| | ``u`` | unlock the specified region | | |
| +--------+-----------------------------------------------+ | |
| | ``r`` | request a read lock for the specified section | | |
| +--------+-----------------------------------------------+ | |
| | ``w`` | request a write lock for the specified | | |
| | | section | | |
| +--------+-----------------------------------------------+ | |
| In addition the following modifiers can be added to the format: | |
| +----------+--------------------------------+-------+ | |
| | Modifier | Meaning | Notes | | |
| +==========+================================+=======+ | |
| | ``|`` | wait until the lock has been | | | |
| | | granted | | | |
| +----------+--------------------------------+-------+ | |
| | ``?`` | return the first lock | \(1) | | |
| | | conflicting with the requested | | | |
| | | lock, or ``None`` if there is | | | |
| | | no conflict. | | | |
| +----------+--------------------------------+-------+ | |
| Note: | |
| (1) | |
| The lock returned is in the format ``(mode, len, start, whence, pid)`` where | |
| *mode* is a character representing the type of lock ('r' or 'w'). This modifier | |
| prevents a request from being granted; it is for query purposes only. | |
| Format characters for the :meth:`flags` method have the following meanings: | |
| +--------+-----------------------------------------------+ | |
| | Format | Meaning | | |
| +========+===============================================+ | |
| | ``a`` | append only flag | | |
| +--------+-----------------------------------------------+ | |
| | ``c`` | close on exec flag | | |
| +--------+-----------------------------------------------+ | |
| | ``n`` | no delay flag (also called non-blocking flag) | | |
| +--------+-----------------------------------------------+ | |
| | ``s`` | synchronization flag | | |
| +--------+-----------------------------------------------+ | |
| In addition the following modifiers can be added to the format: | |
| +----------+---------------------------------+-------+ | |
| | Modifier | Meaning | Notes | | |
| +==========+=================================+=======+ | |
| | ``!`` | turn the specified flags 'off', | \(1) | | |
| | | instead of the default 'on' | | | |
| +----------+---------------------------------+-------+ | |
| | ``=`` | replace the flags, instead of | \(1) | | |
| | | the default 'OR' operation | | | |
| +----------+---------------------------------+-------+ | |
| | ``?`` | return a string in which the | \(2) | | |
| | | characters represent the flags | | | |
| | | that are set. | | | |
| +----------+---------------------------------+-------+ | |
| Notes: | |
| (1) | |
| The ``!`` and ``=`` modifiers are mutually exclusive. | |
| (2) | |
| This string represents the flags after they may have been altered by the same | |
| call. | |
| Examples:: | |
| import posixfile | |
| file = posixfile.open('testfile', 'w') | |
| file.lock('w|') | |
| ... | |
| file.lock('u') | |
| file.close() | |