民意调查功能如何在c中起作用?

use*_*604 5 c sockets linux

我是socket编程的新手,我正在试图弄清楚poll是如何工作的.所以我做了一个小例子程序.该方案似乎我怎么想到的工作,但是当我注释掉具有行int dummyfor循环,只有当它的假设做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)

cni*_*tar 7

if((rv = poll(ufds, 2, 3500)) == -1) perror("select");
                    ^
Run Code Online (Sandbox Code Playgroud)

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