Linux poll???????????
?????Linux???? ???????[ 2017/1/5 10:54:32 ] ?????????????? Linux
????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在线观看
|
天天狠天天透天天伊人
|
丁香六月久久
|
国产精品久久久久久久久久直
|
精品伊人久久大线蕉色首页
|
国产性大片黄在线观看在线放
|
天天综合天天看夜夜添狠狠玩
|
天天插天天透
|
男女性爽大片视频男女生活
|