1 .. -*- coding: utf-8; mode: rst -*-
12 v4l2-select - Synchronous I/O multiplexing
21 #include <sys/types.h>
25 .. c:function:: int select( int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout )
32 The highest-numbered file descriptor in any of the three sets, plus 1.
35 File descriptions to be watched if a read() call won't block.
38 File descriptions to be watched if a write() won't block.
41 File descriptions to be watched for V4L2 events.
50 With the :ref:`select() <func-select>` function applications can suspend
51 execution until the driver has captured data or is ready to accept data
54 When streaming I/O has been negotiated this function waits until a
55 buffer has been filled or displayed and can be dequeued with the
56 :ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl. When buffers are already in
57 the outgoing queue of the driver the function returns immediately.
59 On success :ref:`select() <func-select>` returns the total number of bits set in
60 :c:func:`struct fd_set`. When the function timed out it returns
61 a value of zero. On failure it returns -1 and the ``errno`` variable is
62 set appropriately. When the application did not call
64 :ref:`VIDIOC_STREAMON` yet the :ref:`select() <func-select>`
65 function succeeds, setting the bit of the file descriptor in ``readfds``
66 or ``writefds``, but subsequent :ref:`VIDIOC_DQBUF <VIDIOC_QBUF>`
67 calls will fail. [#f1]_
69 When use of the :ref:`read() <func-read>` function has been negotiated and the
70 driver does not capture yet, the :ref:`select() <func-select>` function starts
71 capturing. When that fails, :ref:`select() <func-select>` returns successful and
72 a subsequent :ref:`read() <func-read>` call, which also attempts to start
73 capturing, will return an appropriate error code. When the driver
74 captures continuously (as opposed to, for example, still images) and
75 data is already available the :ref:`select() <func-select>` function returns
78 When use of the :ref:`write() <func-write>` function has been negotiated the
79 :ref:`select() <func-select>` function just waits until the driver is ready for a
80 non-blocking :ref:`write() <func-write>` call.
82 All drivers implementing the :ref:`read() <func-read>` or :ref:`write() <func-write>`
83 function or streaming I/O must also support the :ref:`select() <func-select>`
86 For more details see the :ref:`select() <func-select>` manual page.
92 On success, :ref:`select() <func-select>` returns the number of descriptors
93 contained in the three returned descriptor sets, which will be zero if
94 the timeout expired. On error -1 is returned, and the ``errno`` variable
95 is set appropriately; the sets and ``timeout`` are undefined. Possible
99 One or more of the file descriptor sets specified a file descriptor
103 The driver does not support multiple read or write streams and the
104 device is already in use.
107 The ``readfds``, ``writefds``, ``exceptfds`` or ``timeout`` pointer
108 references an inaccessible memory area.
111 The call was interrupted by a signal.
114 The ``nfds`` argument is less than zero or greater than
118 The Linux kernel implements :ref:`select() <func-select>` like the
119 :ref:`poll() <func-poll>` function, but :ref:`select() <func-select>` cannot
120 return a ``POLLERR``.