????poll??????select????????
????????????
#include <poll.h>
int poll(struct pollfd fd[]?? nfds_t nfds?? int timeout);
struct pollfd??????£?
struct pollfd{
int fd?? // ?????????
short event??// ????????
short revent??// ????????
}
???????pollfd????????????????????????????????????????????????????poll????????????????????????????????events??????????????????????????????????á?revents???????????????????????????????÷???????á?events????????κ????????????revents?з???????????????£?
?????????????????????????????洢??revents?У??????????????????????events?С?
??????Щ?????events?????????壬??????????????????????revents?з???????poll()??select()?????????????????????????????檔
????POLLIN | POLLPRI?????select()????????POLLOUT |POLLWRBAND?????select()??д?????POLLIN?????POLLRDNORM |POLLRDBAND????POLLOUT??????POLLWRNORM??
???????磬???????????????????????????д????????????? events?POLLIN |POLLOUT????poll????????????????revents?е????????????????????????events???塣???POLLIN??????????????????????????????????????????POLLOUT??????????????????????д?????????????????Щ??????????????????????????????????????????????????д??????????????????????????
?????????????nfds?????????????????????
????timeout???????????????????????I/O?????????poll???????timeout????????????????????timeout?0??poll??????????????г??????I/O?????????????????????????????????????????£?poll()????????????????????????????????????
??????????poll()?????????revents???0?????????????????????????????κ??????????poll()????0????????poll()????-1????????errno??????????
????EBADF???????????????????????????????Ч??
????EFAULT??fds???????????????????????
????EINTR?????????????????????????????????·???
????EINVAL??nfds????????PLIMIT_NOFILE???
????ENOMEM????????治????????????
????demo:
????????????????????" ????select???IO??·????TCP????? "?д??????
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <errno.h>
#include <poll.h>
#define MAX_BUFFER_SIZE 1024
#define IN_FILES 3
#define TIME_DELAY 60*5
#define MAX(a??b) ((a>b)?(a):(b))
int main(int argc ??char **argv)
{
struct pollfd fds[IN_FILES];
char buf[MAX_BUFFER_SIZE];
int i??res??real_read?? maxfd;
fds[0].fd = 0;
if((fds[1].fd=open("data1"??O_RDONLY|O_NONBLOCK)) < 0)
{
fprintf(stderr??"open data1 error:%s"??strerror(errno));
return 1;
}
if((fds[2].fd=open("data2"??O_RDONLY|O_NONBLOCK)) < 0)
{
fprintf(stderr??"open data2 error:%s"??strerror(errno));
return 1;
}
for (i = 0; i < IN_FILES; i++)
{
fds[i].events = POLLIN;
}
for(i=0;i<IN_FILES;i++)
{
fds[i].events = POLLIN;
}
while(fds[0].events || fds[1].events || fds[2].events)
{
if (poll(fds?? IN_FILES?? TIME_DELAY) <= 0)
{
printf("Poll error ");
return 1;
}
for (i = 0; i< IN_FILES; i++)
{
if (fds[i].revents)
{
memset(buf?? 0?? MAX_BUFFER_SIZE);
real_read = read(fds[i].fd?? buf?? MAX_BUFFER_SIZE);
if (real_read < 0)
{
if (errno != EAGAIN)
{
return 1;
}
}
else if (!real_read)
{
close(fds[i].fd);
fds[i].events = 0;
}
else
{
if (i == 0)
{
if ((buf[0] == 'q') || (buf[0] == 'Q'))
{
return 1;
}
}
else
{
buf[real_read] = '

主站蜘蛛池模板: 亚洲精品午夜视频 | 欧美成人三级 | 欧美呦交 | 黄色片www| 欧美大黄 | 久操视频免费 | 亚洲成年人在线 | 欧美一区日韩精品 | 在线亚洲精品国产成人二区 | 亚洲最大的视频网站 | 综合自拍亚洲综合图不卡区 | 欧美一级淫片a免费播放口aaa | 日韩性生活大片 | 久久久久久国产精品视频 | 日韩欧美视频免费观看 | 欧美色久| 亚州毛色毛片免费观看 | 欧美一区二区三区不卡免费 | 韩国久播影院理论片不卡影院 | 日韩三级影视 | 国产成人精品实拍在线 | 欧美日韩亚洲色图 | 看全色黄大色大片免费久久 | 18未满禁止观看黄瓜视频 | 国产精品综合视频 | 日韩色图在线观看 | 黄色大片在线看 | aaaa欧美高清免费 | 亚洲午夜久久久精品影院视色 | 天天射天天干天天操 | 最近2019免费中文字幕视频三 | 福利片网址 | 黄色的视频免费看 | 一区精品麻豆经典 | 欧美视频免费 | 国产精品亚洲午夜一区二区三区 | 欧美视频中文字幕 | 美女一级毛片毛片在线播放 | 亚洲人成片在线观看 | 五月天婷婷免费观看视频在线 | yy4138理论片在线大全 |