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