|
|
1.1 root 1: .TH SELECT 2
2: .CT 2 file_io comm_proc
3: .SH NAME
4: select \(mi synchronous input/output multiplexing
5: .SH SYNOPSIS
6: .nf
7: .B #include <sys/types.h>
8: .PP
9: .B int select(nfds, readfds, writefds, milli);
10: .B fd_set *readfds, *writefds;
11: .fi
12: .SH DESCRIPTION
13: .I Select
14: examines a set of file descriptors
15: to see if they will block if read or written.
16: .I Readfds
17: points to an object of type
18: .BR fd_set ,
19: which contains a set of descriptors to be checked for reading;
20: .I writefds
21: similarly for writing.
22: Only descriptors
23: 0 through
24: .IR nfds \-1
25: are considered.
26: The number of ready descriptors is returned,
27: and the
28: .B fd_set
29: pointed to by
30: .I readfds
31: .RI ( writefds )
32: is overwritten with a set of descriptors
33: ready to be read
34: (written).
35: The call waits until at least one descriptor is ready,
36: or until
37: .I milli
38: milliseconds have passed.
39: .PP
40: Either
41: .I readfds
42: or
43: .I writefds
44: may be 0
45: if no descriptors are interesting.
46: .PP
47: The
48: .BR fd_set
49: type looks like
50: .RS
51: .EX
52: typedef struct {
53: unsigned int fds_bits[FDWORDS];
54: } fd_set;
55: .EE
56: .RE
57: .B FDWORDS
58: is sufficient to contain as many file descriptors as the system will allow
59: (currently 128).
60: If there are
61: .I B
62: bits in an
63: .BR "unsigned int" ,
64: file descriptor
65: .I n
66: is represented by
67: .BI "1<<((" n % B )-1)
68: in word
69: .BI fds_bits[ n / B ]\c
70: \&.
71: .PP
72: These macros should be used
73: to manipulate the contents
74: of an
75: .BR fd_set :
76: .TF FD_ISSET(n,\0s)
77: .TP
78: .PD 0
79: .B FD_ZERO(s)
80: clear all bits
81: in set
82: .I s
83: .TP
84: .B "FD_SET(n, s)
85: set bit for file descriptor
86: .I n
87: in set
88: .I s
89: .TP
90: .B "FD_CLR(n, s)
91: clear bit for file descriptor
92: .I n
93: in s
94: .TP
95: .B "FD_ISSET(n, s)
96: return a value of 1
97: if bit for file descriptor
98: .I n
99: is set in
100: .IR s ,
101: 0 otherwise
102: .PD
103: .SH EXAMPLES
104: .EX
105: int p[2];
106: fd_set wfs;
107: pipe(p);
108: do {
109: FD_SET(p[1], wfs);
110: write(p[1], ".", 1);
111: i++;
112: } while(select(p[1]+1, (fd_set*)0, wfs, 0) == 1);
113: printf("Pipe capacity = %d\en", i);
114: .EE
115: .SH "SEE ALSO"
116: .IR read (2)
117: .SH DIAGNOSTICS
118: .BR EBADF ,
119: .BR EFAULT ,
120: .BR EINTR
121: .SH BUGS
122: .I Milli
123: is rounded up to the nearest second.
124: .br
125: .I Select
126: is intended for use with streams;
127: file descriptors referring to ordinary files
128: or to non-stream special files
129: always appear ready.
130: This is a lie for some special files.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.