@@ -82,65 +82,86 @@ descriptor.
8282The module defines the following functions:
8383
8484
85- .. function :: fcntl(fd, cmd, arg=0)
85+ .. function :: fcntl(fd, cmd, arg=0, / )
8686
8787 Perform the operation *cmd * on file descriptor *fd * (file objects providing
8888 a :meth: `~io.IOBase.fileno ` method are accepted as well). The values used
8989 for *cmd * are operating system dependent, and are available as constants
9090 in the :mod: `fcntl ` module, using the same names as used in the relevant C
91- header files. The argument *arg * can either be an integer value, or a
92- :class: `bytes ` object. With an integer value, the return value of this
93- function is the integer return value of the C :c:func: `fcntl ` call. When
94- the argument is bytes it represents a binary structure, e.g. created by
95- :func: `struct.pack `. The binary data is copied to a buffer whose address is
91+ header files. The argument *arg * can either be an integer value, a
92+ :term: `bytes-like object `, or a string.
93+ The type and size of *arg * must match the type and size of
94+ the argument of the operation as specified in the relevant C documentation.
95+
96+ When *arg * is an integer, the function returns the integer
97+ return value of the C :c:func: `fcntl ` call.
98+
99+ When the argument is bytes-like object, it represents a binary structure,
100+ for example, created by :func: `struct.pack `.
101+ A string value is encoded to binary using the UTF-8 encoding.
102+ The binary data is copied to a buffer whose address is
96103 passed to the C :c:func: `fcntl ` call. The return value after a successful
97104 call is the contents of the buffer, converted to a :class: `bytes ` object.
98105 The length of the returned object will be the same as the length of the
99- *arg * argument. This is limited to 1024 bytes. If the information returned
100- in the buffer by the operating system is larger than 1024 bytes, this is
101- most likely to result in a segmentation violation or a more subtle data
102- corruption.
106+ *arg * argument. This is limited to 1024 bytes.
103107
104108 If the :c:func: `fcntl ` call fails, an :exc: `OSError ` is raised.
105109
110+ .. note ::
111+ If the type or the size of *arg * does not match the type or size
112+ of the argument of the operation (for example, if an integer is
113+ passed when a pointer is expected, or the information returned in
114+ the buffer by the operating system is larger than 1024 bytes),
115+ this is most likely to result in a segmentation violation or
116+ a more subtle data corruption.
117+
106118 .. audit-event :: fcntl.fcntl fd,cmd,arg fcntl.fcntl
107119
120+ .. versionchanged :: next
121+ Add support of arbitrary :term: `bytes-like objects <bytes-like object> `,
122+ not only :class: `bytes `.
123+
108124
109- .. function :: ioctl(fd, request, arg=0, mutate_flag=True)
125+ .. function :: ioctl(fd, request, arg=0, mutate_flag=True, / )
110126
111127 This function is identical to the :func: `~fcntl.fcntl ` function, except
112128 that the argument handling is even more complicated.
113129
114- The *request * parameter is limited to values that can fit in 32-bits.
130+ The *request * parameter is limited to values that can fit in 32-bits
131+ or 64-bits, depending on the platform.
115132 Additional constants of interest for use as the *request * argument can be
116133 found in the :mod: `termios ` module, under the same names as used in
117134 the relevant C header files.
118135
119- The parameter *arg * can be one of an integer, an object supporting the
120- read-only buffer interface (like :class: `bytes `) or an object supporting
121- the read-write buffer interface (like :class: `bytearray `).
136+ The parameter *arg * can be an integer, a :term: `bytes-like object `,
137+ or a string.
138+ The type and size of *arg * must match the type and size of
139+ the argument of the operation as specified in the relevant C documentation.
122140
123- In all but the last case, behaviour is as for the :func: `~fcntl.fcntl `
141+ If *arg * does not support the read-write buffer interface or
142+ the *mutate_flag * is false, behavior is as for the :func: `~fcntl.fcntl `
124143 function.
125144
126- If a mutable buffer is passed, then the behaviour is determined by the value of
127- the *mutate_flag * parameter.
128-
129- If it is false, the buffer's mutability is ignored and behaviour is as for a
130- read-only buffer, except that the 1024 byte limit mentioned above is avoided --
131- so long as the buffer you pass is at least as long as what the operating system
132- wants to put there, things should work.
133-
134- If *mutate_flag * is true (the default), then the buffer is (in effect) passed
135- to the underlying :func: `ioctl ` system call, the latter's return code is
145+ If *arg * supports the read-write buffer interface (like :class: `bytearray `)
146+ and *mutate_flag * is true (the default), then the buffer is (in effect) passed
147+ to the underlying :c:func: `!ioctl ` system call, the latter's return code is
136148 passed back to the calling Python, and the buffer's new contents reflect the
137- action of the :func: `ioctl `. This is a slight simplification, because if the
149+ action of the :c: func: `ioctl `. This is a slight simplification, because if the
138150 supplied buffer is less than 1024 bytes long it is first copied into a static
139151 buffer 1024 bytes long which is then passed to :func: `ioctl ` and copied back
140152 into the supplied buffer.
141153
142154 If the :c:func: `ioctl ` call fails, an :exc: `OSError ` exception is raised.
143155
156+ .. note ::
157+ If the type or size of *arg * does not match the type or size
158+ of the operation's argument (for example, if an integer is
159+ passed when a pointer is expected, or the information returned in
160+ the buffer by the operating system is larger than 1024 bytes,
161+ or the size of the mutable bytes-like object is too small),
162+ this is most likely to result in a segmentation violation or
163+ a more subtle data corruption.
164+
144165 An example::
145166
146167 >>> import array, fcntl, struct, termios, os
@@ -156,8 +177,11 @@ The module defines the following functions:
156177
157178 .. audit-event :: fcntl.ioctl fd,request,arg fcntl.ioctl
158179
180+ .. versionchanged :: next
181+ The GIL is always released during a system call.
182+ System calls failing with EINTR are automatically retried.
159183
160- .. function :: flock(fd, operation)
184+ .. function :: flock(fd, operation, / )
161185
162186 Perform the lock operation *operation * on file descriptor *fd * (file objects providing
163187 a :meth: `~io.IOBase.fileno ` method are accepted as well). See the Unix manual
@@ -169,7 +193,7 @@ The module defines the following functions:
169193 .. audit-event :: fcntl.flock fd,operation fcntl.flock
170194
171195
172- .. function :: lockf(fd, cmd, len=0, start=0, whence=0)
196+ .. function :: lockf(fd, cmd, len=0, start=0, whence=0, / )
173197
174198 This is essentially a wrapper around the :func: `~fcntl.fcntl ` locking calls.
175199 *fd * is the file descriptor (file objects providing a :meth: `~io.IOBase.fileno `
0 commit comments