下面是关于select的代码
有错吗???
全部的代码:
include<fcntl.h>
include<stdio.h>
include<unistd.h>
include<stdlib.h>
include<time.h>
int main(void)
{
int fds[2];
char buf[7];
int i, rc, maxfd;
fd_set inset1, inset2;
struct timeval{
long tv_sec;
long tv_unsec;
} tv;
if ((fds[0] = open("hello1", O_RDWR | O_CREAT, 0666)) < 0)
perror("open hello1");
if ((fds[1] = open("hello2", O_RDWR | O_CREAT, 0666)) < 0)
perror("open hello2");
if ((rc = write(fds[0], "hello!\n", 7)))
printf("rc=%d\n", rc);
lseek(fds[0], 0, SEEK_SET);
maxfd = fds[0] > fds[1] ? fds[0] : fds[1];
FD_ZERO(&inset1);
FD_SET(fds[0], &inset1);
FD_ZERO(&inset2);
FD_SET(fds[0], &inset2);
tv.tv_sec = 2;
tv.tv_unsec = 0;
while (FD_ISSET(fds[0], &inset1) || FD_ISSET(fds[1], &inset2)) {
if (select(maxfd + 1, &inset1, &inset2, NULL, &tv) < 0)
perror("select");
else {
if (RD_ISSET(fds[0], &inset1)) {
rc = read(fds[0], buf, 7);
if (rc > 0) {
buf[rc] = '\0';
printf("read:%s\n", buf);
}
else
perror("read");
}
if (RD_ISSET(fds[1], &inset2)) {
rc = write(fds[1], buf, 7);
if (rc > 0) {
buf[rc] = '\0';
printf("rc=%d,write:%s\n", rc, buf);
}
else
perror("write");
sleep(10);
}
}
}
exit(0);
}
这里timeval是你自己定义的结构,直接struct timeval tv;即可