| If the :cfunc:`fcntl` fails, an :exc:`IOError` is raised. |
| |
| |
| .. function:: ioctl(fd, op[, arg[, mutate_flag]]) |
| |
| This function is identical to the :func:`fcntl` function, except that the |
| operations are typically defined in the library module :mod:`termios` and the |
| argument handling is even more complicated. |
n | |
| The op parameter is limited to values that can fit in 32-bits. |
| |
| The parameter *arg* can be one of an integer, absent (treated identically to the |
| integer ``0``), an object supporting the read-only buffer interface (most likely |
| a plain Python string) or an object supporting the read-write buffer interface. |
| |
| In all but the last case, behaviour is as for the :func:`fcntl` function. |
| |
| If a mutable buffer is passed, then the behaviour is determined by the value of |
| |
| |
| .. function:: lockf(fd, operation, [length, [start, [whence]]]) |
| |
| This is essentially a wrapper around the :func:`fcntl` locking calls. *fd* is |
| the file descriptor of the file to lock or unlock, and *operation* is one of the |
| following values: |
| |
n | * :const:`LOCK_UN` -- unlock |
n | * :const:`LOCK_UN` -- unlock |
| * :const:`LOCK_SH` -- acquire a shared lock |
| * :const:`LOCK_EX` -- acquire an exclusive lock |
| |
n | * :const:`LOCK_SH` -- acquire a shared lock |
| |
| * :const:`LOCK_EX` -- acquire an exclusive lock |
| |
| When *operation* is :const:`LOCK_SH` or :const:`LOCK_EX`, it can also be bit- |
| When *operation* is :const:`LOCK_SH` or :const:`LOCK_EX`, it can also be |
| wise OR'd with :const:`LOCK_NB` to avoid blocking on lock acquisition. If |
| bitwise ORed with :const:`LOCK_NB` to avoid blocking on lock acquisition. |
| :const:`LOCK_NB` is used and the lock cannot be acquired, an :exc:`IOError` will |
| If :const:`LOCK_NB` is used and the lock cannot be acquired, an |
| be raised and the exception will have an *errno* attribute set to |
| :exc:`IOError` will be raised and the exception will have an *errno* |
| :const:`EACCES` or :const:`EAGAIN` (depending on the operating system; for |
| attribute set to :const:`EACCES` or :const:`EAGAIN` (depending on the |
| portability, check for both values). On at least some systems, :const:`LOCK_EX` |
| operating system; for portability, check for both values). On at least some |
| can only be used if the file descriptor refers to a file opened for writing. |
| systems, :const:`LOCK_EX` can only be used if the file descriptor refers to a |
| file opened for writing. |
| |
| *length* is the number of bytes to lock, *start* is the byte offset at which the |
| lock starts, relative to *whence*, and *whence* is as with :func:`fileobj.seek`, |
| specifically: |
| |
n | * :const:`0` -- relative to the start of the file (:const:`SEEK_SET`) |
n | * :const:`0` -- relative to the start of the file (:const:`SEEK_SET`) |
| |
| * :const:`1` -- relative to the current buffer position (:const:`SEEK_CUR`) |
| * :const:`1` -- relative to the current buffer position (:const:`SEEK_CUR`) |
| |
| * :const:`2` -- relative to the end of the file (:const:`SEEK_END`) |
| * :const:`2` -- relative to the end of the file (:const:`SEEK_END`) |
| |
| The default for *start* is 0, which means to start at the beginning of the file. |
| The default for *length* is 0 which means to lock to the end of the file. The |
| default for *whence* is also 0. |
| |
| Examples (all on a SVR4 compliant system):: |
| |
| import struct, fcntl, os |
| integer value; in the second example it will hold a string value. The structure |
| lay-out for the *lockdata* variable is system dependent --- therefore using the |
| :func:`flock` call may be better. |
| |
| |
| .. seealso:: |
| |
| Module :mod:`os` |
t | If the locking flags :const:`O_SHLOCK` and :const:`O_EXLOCK` are present in the |
t | If the locking flags :const:`O_SHLOCK` and :const:`O_EXLOCK` are present |
| :mod:`os` module, the :func:`os.open` function provides a more platform- |
| in the :mod:`os` module, the :func:`os.open` function provides a more |
| independent alternative to the :func:`lockf` and :func:`flock` functions. |
| platform-independent alternative to the :func:`lockf` and :func:`flock` |
| functions. |
| |