poll
来源:互联网 发布:知乎大学排名 编辑:程序博客网 时间:2024/05/04 13:07
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<poll.h>
int main(){
struct pollfd fds[3];
int i,rc;
char buf[80];
fds[0].fd=0;
fds[1].fd=open("pipe1",O_RDONLY|O_NONBLOCK);
fds[2].fd=open("pipe2",O_RDONLY|O_NONBLOCK);
for(i=0;i<3;++i)
fds[i].events=POLLIN;
while(fds[0].events||fds[1].events||fds[2].events){
poll(fds,3,-1);
for(i=0;i<3;i++){
if(fds[i].revents){
rc=read(fds[i].fd,buf,sizeof(buf)-1);
if(rc>0){
buf[rc]=0;
printf("read:%s",buf);
}
else if(rc==0){
close(fds[i].fd);
fds[i].events=0;
}else{
perror("read");
exit(EXIT_FAILURE);
}
}
}
}
exit(EXIT_SUCCESS);
}