[391] | 1 | :mod:`fcntl` --- The ``fcntl`` and ``ioctl`` system calls
|
---|
| 2 | =========================================================
|
---|
[2] | 3 |
|
---|
| 4 | .. module:: fcntl
|
---|
| 5 | :platform: Unix
|
---|
| 6 | :synopsis: The fcntl() and ioctl() system calls.
|
---|
| 7 | .. sectionauthor:: Jaap Vermeulen
|
---|
| 8 |
|
---|
| 9 |
|
---|
| 10 | .. index::
|
---|
[391] | 11 | pair: UNIX; file control
|
---|
| 12 | pair: UNIX; I/O control
|
---|
[2] | 13 |
|
---|
| 14 | This module performs file control and I/O control on file descriptors. It is an
|
---|
[391] | 15 | interface to the :c:func:`fcntl` and :c:func:`ioctl` Unix routines.
|
---|
[2] | 16 |
|
---|
| 17 | All functions in this module take a file descriptor *fd* as their first
|
---|
| 18 | argument. This can be an integer file descriptor, such as returned by
|
---|
| 19 | ``sys.stdin.fileno()``, or a file object, such as ``sys.stdin`` itself, which
|
---|
[391] | 20 | provides a :meth:`~io.IOBase.fileno` which returns a genuine file descriptor.
|
---|
[2] | 21 |
|
---|
| 22 | The module defines the following functions:
|
---|
| 23 |
|
---|
| 24 |
|
---|
| 25 | .. function:: fcntl(fd, op[, arg])
|
---|
| 26 |
|
---|
| 27 | Perform the requested operation on file descriptor *fd* (file objects providing
|
---|
[391] | 28 | a :meth:`~io.IOBase.fileno` method are accepted as well). The operation is
|
---|
| 29 | defined by *op*
|
---|
[2] | 30 | and is operating system dependent. These codes are also found in the
|
---|
| 31 | :mod:`fcntl` module. The argument *arg* is optional, and defaults to the integer
|
---|
| 32 | value ``0``. When present, it can either be an integer value, or a string.
|
---|
| 33 | With the argument missing or an integer value, the return value of this function
|
---|
[391] | 34 | is the integer return value of the C :c:func:`fcntl` call. When the argument is
|
---|
[2] | 35 | a string it represents a binary structure, e.g. created by :func:`struct.pack`.
|
---|
| 36 | The binary data is copied to a buffer whose address is passed to the C
|
---|
[391] | 37 | :c:func:`fcntl` call. The return value after a successful call is the contents
|
---|
[2] | 38 | of the buffer, converted to a string object. The length of the returned string
|
---|
| 39 | will be the same as the length of the *arg* argument. This is limited to 1024
|
---|
| 40 | bytes. If the information returned in the buffer by the operating system is
|
---|
| 41 | larger than 1024 bytes, this is most likely to result in a segmentation
|
---|
| 42 | violation or a more subtle data corruption.
|
---|
| 43 |
|
---|
[391] | 44 | If the :c:func:`fcntl` fails, an :exc:`IOError` is raised.
|
---|
[2] | 45 |
|
---|
| 46 |
|
---|
| 47 | .. function:: ioctl(fd, op[, arg[, mutate_flag]])
|
---|
| 48 |
|
---|
[391] | 49 | This function is identical to the :func:`~fcntl.fcntl` function, except that the
|
---|
[2] | 50 | operations are typically defined in the library module :mod:`termios` and the
|
---|
| 51 | argument handling is even more complicated.
|
---|
| 52 |
|
---|
| 53 | The op parameter is limited to values that can fit in 32-bits.
|
---|
| 54 |
|
---|
| 55 | The parameter *arg* can be one of an integer, absent (treated identically to the
|
---|
| 56 | integer ``0``), an object supporting the read-only buffer interface (most likely
|
---|
| 57 | a plain Python string) or an object supporting the read-write buffer interface.
|
---|
| 58 |
|
---|
[391] | 59 | In all but the last case, behaviour is as for the :func:`~fcntl.fcntl`
|
---|
| 60 | function.
|
---|
[2] | 61 |
|
---|
| 62 | If a mutable buffer is passed, then the behaviour is determined by the value of
|
---|
| 63 | the *mutate_flag* parameter.
|
---|
| 64 |
|
---|
| 65 | If it is false, the buffer's mutability is ignored and behaviour is as for a
|
---|
| 66 | read-only buffer, except that the 1024 byte limit mentioned above is avoided --
|
---|
| 67 | so long as the buffer you pass is as least as long as what the operating system
|
---|
| 68 | wants to put there, things should work.
|
---|
| 69 |
|
---|
| 70 | If *mutate_flag* is true, then the buffer is (in effect) passed to the
|
---|
| 71 | underlying :func:`ioctl` system call, the latter's return code is passed back to
|
---|
| 72 | the calling Python, and the buffer's new contents reflect the action of the
|
---|
| 73 | :func:`ioctl`. This is a slight simplification, because if the supplied buffer
|
---|
| 74 | is less than 1024 bytes long it is first copied into a static buffer 1024 bytes
|
---|
| 75 | long which is then passed to :func:`ioctl` and copied back into the supplied
|
---|
| 76 | buffer.
|
---|
| 77 |
|
---|
| 78 | If *mutate_flag* is not supplied, then from Python 2.5 it defaults to true,
|
---|
| 79 | which is a change from versions 2.3 and 2.4. Supply the argument explicitly if
|
---|
| 80 | version portability is a priority.
|
---|
| 81 |
|
---|
| 82 | An example::
|
---|
| 83 |
|
---|
| 84 | >>> import array, fcntl, struct, termios, os
|
---|
| 85 | >>> os.getpgrp()
|
---|
| 86 | 13341
|
---|
| 87 | >>> struct.unpack('h', fcntl.ioctl(0, termios.TIOCGPGRP, " "))[0]
|
---|
| 88 | 13341
|
---|
| 89 | >>> buf = array.array('h', [0])
|
---|
| 90 | >>> fcntl.ioctl(0, termios.TIOCGPGRP, buf, 1)
|
---|
| 91 | 0
|
---|
| 92 | >>> buf
|
---|
| 93 | array('h', [13341])
|
---|
| 94 |
|
---|
| 95 |
|
---|
| 96 | .. function:: flock(fd, op)
|
---|
| 97 |
|
---|
| 98 | Perform the lock operation *op* on file descriptor *fd* (file objects providing
|
---|
[391] | 99 | a :meth:`~io.IOBase.fileno` method are accepted as well). See the Unix manual
|
---|
[2] | 100 | :manpage:`flock(2)` for details. (On some systems, this function is emulated
|
---|
[391] | 101 | using :c:func:`fcntl`.)
|
---|
[2] | 102 |
|
---|
| 103 |
|
---|
| 104 | .. function:: lockf(fd, operation, [length, [start, [whence]]])
|
---|
| 105 |
|
---|
[391] | 106 | This is essentially a wrapper around the :func:`~fcntl.fcntl` locking calls.
|
---|
| 107 | *fd* is the file descriptor of the file to lock or unlock, and *operation*
|
---|
| 108 | is one of the following values:
|
---|
[2] | 109 |
|
---|
| 110 | * :const:`LOCK_UN` -- unlock
|
---|
| 111 | * :const:`LOCK_SH` -- acquire a shared lock
|
---|
| 112 | * :const:`LOCK_EX` -- acquire an exclusive lock
|
---|
| 113 |
|
---|
| 114 | When *operation* is :const:`LOCK_SH` or :const:`LOCK_EX`, it can also be
|
---|
| 115 | bitwise ORed with :const:`LOCK_NB` to avoid blocking on lock acquisition.
|
---|
| 116 | If :const:`LOCK_NB` is used and the lock cannot be acquired, an
|
---|
| 117 | :exc:`IOError` will be raised and the exception will have an *errno*
|
---|
| 118 | attribute set to :const:`EACCES` or :const:`EAGAIN` (depending on the
|
---|
| 119 | operating system; for portability, check for both values). On at least some
|
---|
| 120 | systems, :const:`LOCK_EX` can only be used if the file descriptor refers to a
|
---|
| 121 | file opened for writing.
|
---|
| 122 |
|
---|
[391] | 123 | *length* is the number of bytes to lock, *start* is the byte offset at
|
---|
| 124 | which the lock starts, relative to *whence*, and *whence* is as with
|
---|
| 125 | :func:`io.IOBase.seek`, specifically:
|
---|
[2] | 126 |
|
---|
[391] | 127 | * :const:`0` -- relative to the start of the file (:data:`os.SEEK_SET`)
|
---|
| 128 | * :const:`1` -- relative to the current buffer position (:data:`os.SEEK_CUR`)
|
---|
| 129 | * :const:`2` -- relative to the end of the file (:data:`os.SEEK_END`)
|
---|
[2] | 130 |
|
---|
| 131 | The default for *start* is 0, which means to start at the beginning of the file.
|
---|
| 132 | The default for *length* is 0 which means to lock to the end of the file. The
|
---|
| 133 | default for *whence* is also 0.
|
---|
| 134 |
|
---|
| 135 | Examples (all on a SVR4 compliant system)::
|
---|
| 136 |
|
---|
| 137 | import struct, fcntl, os
|
---|
| 138 |
|
---|
| 139 | f = open(...)
|
---|
| 140 | rv = fcntl.fcntl(f, fcntl.F_SETFL, os.O_NDELAY)
|
---|
| 141 |
|
---|
| 142 | lockdata = struct.pack('hhllhh', fcntl.F_WRLCK, 0, 0, 0, 0, 0)
|
---|
| 143 | rv = fcntl.fcntl(f, fcntl.F_SETLKW, lockdata)
|
---|
| 144 |
|
---|
| 145 | Note that in the first example the return value variable *rv* will hold an
|
---|
| 146 | integer value; in the second example it will hold a string value. The structure
|
---|
| 147 | lay-out for the *lockdata* variable is system dependent --- therefore using the
|
---|
| 148 | :func:`flock` call may be better.
|
---|
| 149 |
|
---|
| 150 |
|
---|
| 151 | .. seealso::
|
---|
| 152 |
|
---|
| 153 | Module :mod:`os`
|
---|
[391] | 154 | If the locking flags :data:`~os.O_SHLOCK` and :data:`~os.O_EXLOCK` are
|
---|
| 155 | present in the :mod:`os` module (on BSD only), the :func:`os.open`
|
---|
| 156 | function provides an alternative to the :func:`lockf` and :func:`flock`
|
---|
| 157 | functions.
|
---|
[2] | 158 |
|
---|