首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用epoll?

如何使用epoll?
EN

Stack Overflow用户
提问于 2013-06-01 11:41:51
回答 1查看 1.4K关注 0票数 2

考虑以下代码片段:

代码语言:javascript
复制
#import <pthread.h>
#import <stdio.h>
#import <sys/epoll.h>
#import <sys/eventfd.h>
#import <unistd.h>

int epollfd;
int evntfd;

void *function(void *arg) {
    struct epoll_event events;

    while(1) {
        int c = epoll_wait(epollfd, &events, 1, -1);

        if(c != -1) {
            printf("%d\n", c);
            break;
        }
    }

    return NULL;
}

int main() {
    evntfd = eventfd(0, 0);

    epollfd = epoll_create(0);

    struct epoll_event evnt = { 0 };
    evnt.data.fd = evntfd;
    evnt.events = EPOLLIN | EPOLLET;

    epoll_ctl(epollfd, EPOLL_CTL_ADD, evntfd, &evnt);

    pthread_t thread;
    pthread_create(&thread, NULL, &function, NULL);

    sleep(1);

    unsigned long int u = 7;
    write(evntfd, &u, sizeof(unsigned long int));

    sleep(1);

    return 0;
}

write()不应该让epoll_wait返回一个不同于-1的值吗?当我编译上面的代码并运行它时,什么都没有打印出来...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-01 12:03:13

我在你的代码上运行了strace,发现了一个令人惊讶的结果:

代码语言:javascript
复制
epoll_create(0)                         = -1 EINVAL (Invalid argument)

epoll文件描述符的大小需要大于零。这让其他一切都失败了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16868827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档