close
/* mkfifo fifo1 mkfifo fifo2 echo "test" > fifo1 */ #include<stdlib.h> #include<stdio.h> #include<string.h> #include<sys/select.h> #include<limits.h> #include<unistd.h> #include<fcntl.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int main() { char buffer[PIPE_BUF]; int fd1 = open("fifo1",O_RDWR | O_NONBLOCK); int fd2 = open("fifo2",O_RDWR | O_NONBLOCK); int maxfd=fd1; if(maxfd<fd2)maxfd=fd2; maxfd++; printf("fd1=%d, fd2=%d, maxfd=%d",fd1,fd2,maxfd); fd_set fdSet; struct timeval tv; while(1) { FD_ZERO(&fdSet); tv.tv_sec=3; tv.tv_usec=0; FD_SET(fd1,&fdSet); FD_SET(fd2,&fdSet); memset(buffer,0,sizeof(buffer)); int ready=select(maxfd,&fdSet,NULL,NULL,&tv); if(ready==-1) { printf("failure\n"); continue; } if(ready==0) { printf("Timeout\n"); continue; } if(FD_ISSET(fd1,&fdSet)) { read(fd1,&buffer,sizeof(buffer)); printf("Device 1: %s\n",buffer); } if(FD_ISSET(fd2,&fdSet)) { read(fd2,&buffer,sizeof(buffer)); printf("Device 2: %s\n",buffer); } } close(fd1); close(fd2); }
全站熱搜