????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] = '

主站蜘蛛池模板: 欧美三级香港三级日本三级 | 欧美日韩国产伦理 | 丝袜足控免费网站xx网站 | 午夜色影院 | 香蕉大黄香蕉在线观看 | 久久综合久久综合久久综合 | 中文字幕 亚洲 一区二区三区 | 免费一级欧美大片在线观看 | 日韩性视频网站 | 亚洲第一视频网站 | 国产99精品视频 | 欧美成人免费在线视频 | 黄色一级视频片 | 中文字幕精品视频在线观看 | 免费一级a毛片在线 | 欧美国产日韩综合 | 日韩18在线观看 | av小说在线阅读 | 亚洲精品456在在线播放 | 两性午夜性刺激在线观看免费 | 欧美一级黄色片视频 | 日韩亚洲欧洲在线com91tv | 靠逼久久| 精品久久久久久综合日本 | 亚洲va欧美va国产va天堂 | 免费福利午夜影视网 | 在线亚洲+欧美+日本专区 | 成人在线观看视频网站 | 高清freexxxx性| 欧美一区二区三区不卡免费观看 | 波多野结衣视频在线 | 国产一区二区三区欧美 | 国产色a在线观看 | 天天狠天天透天天伊人 | 丁香六月久久 | 国产精品久久久久久久久久直 | 精品伊人久久大线蕉色首页 | 国产性大片黄在线观看在线放 | 天天综合天天看夜夜添狠狠玩 | 天天插天天透 | 男女性爽大片视频男女生活 |