I am struggling to understand why one should use pselect()/ppoll() instead of wrapping an ordinary select() or poll() call around sigprocmask(). The linux man page talks about “race conditions”, but how would such dangers occur?
I plan to use poll() for an application (since ppoll() isn't widely supported) but wish to know how (if possible) it can be made signal safe? please see preliminary code scenario below.
Hi, guys:
I want to write my own shell using C. I am confused about the usage of I/O multiplex. Does anyone know some examples or explain it to me ?
Thanks so much (1 Reply)
I created multiple POSIX threads (on readhat Linux) in a C program in my app. What I am doing is - I am creating threads equal to the number of CPUs in the system and and equal number of instances of a certain data structure, basically a queue implementation. I am assigning one ID to the thread... (2 Replies)
Hi,
Off late I had been looking at the differences b/w select() & poll() system calls. The requirement is to reduce the overhead, processor power in waiting for the data. In the kind of connections under consideration there would be very frequent data arriving on the sockets, so poll() fares... (12 Replies)
Hi,
As far as I known, kqueue/kevent model can be used to improve the efficiency of systems event dispatching. I m wondering whether kqueue/kevent is same as the real-time OS event model. I also want to know when writing multiplexing app in real-time OS, what APIs need to be used for... (1 Reply)
PSELECT(2) BSD System Calls Manual PSELECT(2)NAME
pselect -- synchronous I/O multiplexing a la POSIX.1g
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <sys/select.h>
int
pselect(int nfds, fd_set * restrict readfds, fd_set * restrict writefds, fd_set * restrict exceptfds,
const struct timespec * restrict timeout, const sigset_t * restrict newsigmask);
DESCRIPTION
The pselect() function was introduced by IEEE Std 1003.1g-2000 (``POSIX.1'') as a slightly stronger version of select(2). The nfds, readfds,
writefds, and exceptfds arguments are all identical to the analogous arguments of select(). The timeout argument in pselect() points to a
const struct timespec rather than the (modifiable) struct timeval used by select(); as in select(), a null pointer may be passed to indicate
that pselect() should wait indefinitely. Finally, newsigmask specifies a signal mask which is set while waiting for input. When pselect()
returns, the original signal mask is restored.
See select(2) for a more detailed discussion of the semantics of this interface, and for macros used to manipulate the fd_set data type.
RETURN VALUES
The pselect() function returns the same values and under the same conditions as select().
ERRORS
The pselect() function may fail for any of the reasons documented for select(2) and (if a signal mask is provided) sigprocmask(2).
SEE ALSO kqueue(2), poll(2), select(2), sigprocmask(2)STANDARDS
The pselect() function conforms to IEEE Std 1003.1-2001 (``POSIX.1'').
HISTORY
The pselect() function first appeared in FreeBSD 5.0.
AUTHORS
The first implementation of pselect() function and this manual page were written by Garrett Wollman <wollman@FreeBSD.org>.
BSD October 27, 2009 BSD