Messages in this thread | | | From | Ben Pfaff <> | Subject | Re: [PATCH] nextfd(2) | Date | Sat, 07 Apr 2012 14:21:24 -0700 |
| |
"H. Peter Anvin" <hpa@zytor.com> writes:
> On 04/06/2012 02:54 AM, Alexey Dobriyan wrote: >> >> Without proc knowledge about fdtable is gathered linearly and still unreliable. >> With nextfd(2), even procful environments could lose several failure branches. >> And they can keep old dumb fd++ or smart /proc/self/fd loops for a change. >> > > Incidentally, if we were to create a system call for this -- which I so > far see no reason for -- I would make it return a select-style bitmask > of file descriptors in use, not a "next fd" which would require a system > call per iteration.
It's already possible to do something a little like that with the existing "poll" system call:
#include <stdio.h> #include <sys/poll.h>
int main(void) { enum { N_FDS = 1024 }; struct pollfd fds[N_FDS]; int error; int i;
for (i = 0; i < N_FDS; i++) { fds[i].fd = i; fds[i].events = 0; }
error = poll(fds, N_FDS, 0); if (error < 0) perror("poll"); else { printf("valid fds:"); for (i = 0; i < N_FDS; i++) if (!(fds[i].revents & POLLNVAL)) printf(" %d", fds[i].fd); printf("\n"); }
return 0; }
blp@blp:~/tmp(0)$ gcc tmp.c -Wall blp@blp:~/tmp(0)$ ./a.out valid fds: 0 1 2 blp@blp:~/tmp(0)$ ./a.out 5>/dev/null valid fds: 0 1 2 5 blp@blp:~/tmp(0)$ ./a.out 5>/dev/null 3</dev/stdin valid fds: 0 1 2 3 5 blp@blp:~/tmp(0)$
-- Ben Pfaff http://benpfaff.org
| |