1:mod:`fcntl` --- The ``fcntl`` and ``ioctl`` system calls 2========================================================= 3 4.. module:: fcntl 5 :platform: Unix 6 :synopsis: The fcntl() and ioctl() system calls. 7 8.. sectionauthor:: Jaap Vermeulen 9 10.. index:: 11 pair: UNIX; file control 12 pair: UNIX; I/O control 13 14---------------- 15 16This module performs file control and I/O control on file descriptors. It is an 17interface to the :c:func:`fcntl` and :c:func:`ioctl` Unix routines. For a 18complete description of these calls, see :manpage:`fcntl(2)` and 19:manpage:`ioctl(2)` Unix manual pages. 20 21.. include:: ../includes/wasm-notavail.rst 22 23All functions in this module take a file descriptor *fd* as their first 24argument. This can be an integer file descriptor, such as returned by 25``sys.stdin.fileno()``, or an :class:`io.IOBase` object, such as ``sys.stdin`` 26itself, which provides a :meth:`~io.IOBase.fileno` that returns a genuine file 27descriptor. 28 29.. versionchanged:: 3.3 30 Operations in this module used to raise an :exc:`IOError` where they now 31 raise an :exc:`OSError`. 32 33.. versionchanged:: 3.8 34 The fcntl module now contains ``F_ADD_SEALS``, ``F_GET_SEALS``, and 35 ``F_SEAL_*`` constants for sealing of :func:`os.memfd_create` file 36 descriptors. 37 38.. versionchanged:: 3.9 39 On macOS, the fcntl module exposes the ``F_GETPATH`` constant, which obtains 40 the path of a file from a file descriptor. 41 On Linux(>=3.15), the fcntl module exposes the ``F_OFD_GETLK``, ``F_OFD_SETLK`` 42 and ``F_OFD_SETLKW`` constants, which are used when working with open file 43 description locks. 44 45.. versionchanged:: 3.10 46 On Linux >= 2.6.11, the fcntl module exposes the ``F_GETPIPE_SZ`` and 47 ``F_SETPIPE_SZ`` constants, which allow to check and modify a pipe's size 48 respectively. 49 50.. versionchanged:: 3.11 51 On FreeBSD, the fcntl module exposes the ``F_DUP2FD`` and ``F_DUP2FD_CLOEXEC`` 52 constants, which allow to duplicate a file descriptor, the latter setting 53 ``FD_CLOEXEC`` flag in addition. 54 55The module defines the following functions: 56 57 58.. function:: fcntl(fd, cmd, arg=0) 59 60 Perform the operation *cmd* on file descriptor *fd* (file objects providing 61 a :meth:`~io.IOBase.fileno` method are accepted as well). The values used 62 for *cmd* are operating system dependent, and are available as constants 63 in the :mod:`fcntl` module, using the same names as used in the relevant C 64 header files. The argument *arg* can either be an integer value, or a 65 :class:`bytes` object. With an integer value, the return value of this 66 function is the integer return value of the C :c:func:`fcntl` call. When 67 the argument is bytes it represents a binary structure, e.g. created by 68 :func:`struct.pack`. The binary data is copied to a buffer whose address is 69 passed to the C :c:func:`fcntl` call. The return value after a successful 70 call is the contents of the buffer, converted to a :class:`bytes` object. 71 The length of the returned object will be the same as the length of the 72 *arg* argument. This is limited to 1024 bytes. If the information returned 73 in the buffer by the operating system is larger than 1024 bytes, this is 74 most likely to result in a segmentation violation or a more subtle data 75 corruption. 76 77 If the :c:func:`fcntl` fails, an :exc:`OSError` is raised. 78 79 .. audit-event:: fcntl.fcntl fd,cmd,arg fcntl.fcntl 80 81 82.. function:: ioctl(fd, request, arg=0, mutate_flag=True) 83 84 This function is identical to the :func:`~fcntl.fcntl` function, except 85 that the argument handling is even more complicated. 86 87 The *request* parameter is limited to values that can fit in 32-bits. 88 Additional constants of interest for use as the *request* argument can be 89 found in the :mod:`termios` module, under the same names as used in 90 the relevant C header files. 91 92 The parameter *arg* can be one of an integer, an object supporting the 93 read-only buffer interface (like :class:`bytes`) or an object supporting 94 the read-write buffer interface (like :class:`bytearray`). 95 96 In all but the last case, behaviour is as for the :func:`~fcntl.fcntl` 97 function. 98 99 If a mutable buffer is passed, then the behaviour is determined by the value of 100 the *mutate_flag* parameter. 101 102 If it is false, the buffer's mutability is ignored and behaviour is as for a 103 read-only buffer, except that the 1024 byte limit mentioned above is avoided -- 104 so long as the buffer you pass is at least as long as what the operating system 105 wants to put there, things should work. 106 107 If *mutate_flag* is true (the default), then the buffer is (in effect) passed 108 to the underlying :func:`ioctl` system call, the latter's return code is 109 passed back to the calling Python, and the buffer's new contents reflect the 110 action of the :func:`ioctl`. This is a slight simplification, because if the 111 supplied buffer is less than 1024 bytes long it is first copied into a static 112 buffer 1024 bytes long which is then passed to :func:`ioctl` and copied back 113 into the supplied buffer. 114 115 If the :c:func:`ioctl` fails, an :exc:`OSError` exception is raised. 116 117 An example:: 118 119 >>> import array, fcntl, struct, termios, os 120 >>> os.getpgrp() 121 13341 122 >>> struct.unpack('h', fcntl.ioctl(0, termios.TIOCGPGRP, " "))[0] 123 13341 124 >>> buf = array.array('h', [0]) 125 >>> fcntl.ioctl(0, termios.TIOCGPGRP, buf, 1) 126 0 127 >>> buf 128 array('h', [13341]) 129 130 .. audit-event:: fcntl.ioctl fd,request,arg fcntl.ioctl 131 132 133.. function:: flock(fd, operation) 134 135 Perform the lock operation *operation* on file descriptor *fd* (file objects providing 136 a :meth:`~io.IOBase.fileno` method are accepted as well). See the Unix manual 137 :manpage:`flock(2)` for details. (On some systems, this function is emulated 138 using :c:func:`fcntl`.) 139 140 If the :c:func:`flock` fails, an :exc:`OSError` exception is raised. 141 142 .. audit-event:: fcntl.flock fd,operation fcntl.flock 143 144 145.. function:: lockf(fd, cmd, len=0, start=0, whence=0) 146 147 This is essentially a wrapper around the :func:`~fcntl.fcntl` locking calls. 148 *fd* is the file descriptor (file objects providing a :meth:`~io.IOBase.fileno` 149 method are accepted as well) of the file to lock or unlock, and *cmd* 150 is one of the following values: 151 152 * :const:`LOCK_UN` -- unlock 153 * :const:`LOCK_SH` -- acquire a shared lock 154 * :const:`LOCK_EX` -- acquire an exclusive lock 155 156 When *cmd* is :const:`LOCK_SH` or :const:`LOCK_EX`, it can also be 157 bitwise ORed with :const:`LOCK_NB` to avoid blocking on lock acquisition. 158 If :const:`LOCK_NB` is used and the lock cannot be acquired, an 159 :exc:`OSError` will be raised and the exception will have an *errno* 160 attribute set to :const:`EACCES` or :const:`EAGAIN` (depending on the 161 operating system; for portability, check for both values). On at least some 162 systems, :const:`LOCK_EX` can only be used if the file descriptor refers to a 163 file opened for writing. 164 165 *len* is the number of bytes to lock, *start* is the byte offset at 166 which the lock starts, relative to *whence*, and *whence* is as with 167 :func:`io.IOBase.seek`, specifically: 168 169 * :const:`0` -- relative to the start of the file (:data:`os.SEEK_SET`) 170 * :const:`1` -- relative to the current buffer position (:data:`os.SEEK_CUR`) 171 * :const:`2` -- relative to the end of the file (:data:`os.SEEK_END`) 172 173 The default for *start* is 0, which means to start at the beginning of the file. 174 The default for *len* is 0 which means to lock to the end of the file. The 175 default for *whence* is also 0. 176 177 .. audit-event:: fcntl.lockf fd,cmd,len,start,whence fcntl.lockf 178 179Examples (all on a SVR4 compliant system):: 180 181 import struct, fcntl, os 182 183 f = open(...) 184 rv = fcntl.fcntl(f, fcntl.F_SETFL, os.O_NDELAY) 185 186 lockdata = struct.pack('hhllhh', fcntl.F_WRLCK, 0, 0, 0, 0, 0) 187 rv = fcntl.fcntl(f, fcntl.F_SETLKW, lockdata) 188 189Note that in the first example the return value variable *rv* will hold an 190integer value; in the second example it will hold a :class:`bytes` object. The 191structure lay-out for the *lockdata* variable is system dependent --- therefore 192using the :func:`flock` call may be better. 193 194 195.. seealso:: 196 197 Module :mod:`os` 198 If the locking flags :data:`~os.O_SHLOCK` and :data:`~os.O_EXLOCK` are 199 present in the :mod:`os` module (on BSD only), the :func:`os.open` 200 function provides an alternative to the :func:`lockf` and :func:`flock` 201 functions. 202