/*
* select.c
*
* Created on: 2011-11-7
* Author: lc
*/
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <time.h>
int main() {
int count, maxfd;
char buf[7];
int fds[2];
fd_set setr, setw;
struct timeval tv;
if ((fds[0] = open("file1", O_CREAT | O_RDWR, 0666)) < 0) {
perror("open file1");
}
if ((fds[1] = open("file2", O_CREAT | O_RDWR, 0666)) < 0) {
perror("open file2");
}
if ((count = write(fds[0], "hello!\n", 7))) {
printf("count=%d\n", count);
}
lseek(fds[0], 0, SEEK_SET);
tv.tv_sec = 2;
tv.tv_usec = 0;
maxfd = fds[0] > fds[1] ? fds[0] : fds[1];
FD_ZERO(&setr);
FD_ZERO(&setw);
FD_SET(fds[0],&setr);
FD_SET(fds[1],&setw);
while (FD_ISSET(fds[0],&setr) || FD_ISSET(fds[1],&setw)) {
if ((select(maxfd + 1, &setr, &setw, NULL, &tv)) < 0) {
perror("select");
} else {
//阻塞时,读取的count值为0
if (FD_ISSET(fds[0],&setr)) {
count = read(fds[0],buf,7);
if(count > 0) {
buf[count] = '\0';
printf("count = %d,read : %s\n",count,buf);
} else {
perror("read file1");
}
}
if (FD_ISSET(fds[1],&setw)) {
count = write(fds[1],buf,7);
if(count > 0) {
buf[count] = '\0';
printf("count=%d,write : %s\n",count,buf);
} else {
perror("write file2");
}
sleep(5);
}
}
}
return 0;
}