我是socket编程的新手,我正在试图弄清楚poll是如何工作的.所以我做了一个小例子程序.该方案似乎我怎么想到的工作,但是当我注释掉具有行int dummy 的for循环,只有当它的假设做10次运行一个迭代.我不明白的是该变量与for循环有什么关系.该程序假设在3.5秒后打印"超时"并且如果有可用输入则打印"返回命中".
#include <stdio.h>
#include <poll.h>
int main(int argc, char *argv[]) {
int a;
int b;
int c;
char buf[10];
int i;
struct pollfd ufds[1];
ufds[0].fd = 0;
ufds[0].events = POLLIN;
int rv;
int dummy;
for(i=0; i < 10; i++) {
printf("%i ", i);
if((rv = poll(ufds, 2, 3500)) == -1) perror("select");
else if (rv == 0) printf("Timeout occurred!\n");
else if (ufds[0].revents & POLLIN) {
printf("return hit\n");
read(0, buf, 10);
}
fflush(stdout);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
if((rv = poll(ufds, 2, 3500)) == -1) perror("select");
^
Run Code Online (Sandbox Code Playgroud)
你告诉poll你有2个文件描述符(2个pollfd结构),但你只有一个.这是未定义的行为(你正在欺骗民意调查以进入未分配的内存).将该参数更改为1.
| 归档时间: |
|
| 查看次数: |
11181 次 |
| 最近记录: |