调查函数如何在c中工作?

我是新来的套接字编程,我试图找出如何民意测验的作品。 所以我做了一个小例子程序。 该程序似乎按照我所期望的方式工作,但是当我注释掉具有int dummy虚线的行时, for循环仅在假设执行十次时才运行一次迭代。 我不明白的是variables与for循环有什么关系。 程序假设在3.5秒后打印“超时”,如果有input,打印“返回打”。

 #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; } 

Solutions Collecting From Web of "调查函数如何在c中工作?"

 if((rv = poll(ufds, 2, 3500)) == -1) perror("select"); ^ 

你告诉poll你有2个文件描述符(2 pollfd结构),但你只有一个。 这是未定义的行为 (你正在欺骗轮询,踩入未分配的内存)。 将该参数更改为1。

注释dummy时行为的改变很可能是因为改变了影响ufds的堆栈以及将错误的nfds值传递给poll()的事实。 您应该在下次调用poll()之前重置pollfd.revents的值。