【问题标题】:epoll file descriptor operationsepoll 文件描述符操作
【发布时间】:2011-06-18 21:59:39
【问题描述】:

我正试图围绕 Linux 中的 epoll 展开思考。
正常的操作好像是:

// Create the epoll_fd
int epoll_fd = epoll_create(10);

...

// Add file descriptors to it
struct epoll_event ev = {0};
ev.events |= EPOLLIN;
ev.data.ptr = ...;

/* for brevity, I don't do error checking here */
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, some_fd, &ev);

...

// Wait for IO events
struct epoll_event events[10];
int num_events = epoll_wait(epoll_fd, events, 10, -1);

// Now handle the events
...

我的问题是:鉴于epoll_fd 似乎是一个常规文件描述符,除了三个 epoll 函数调用之外,我还能用它执行其他文件操作吗?

【问题讨论】:

  • 在使用epoll 之前,您应该真正问问自己为什么要使用它。它是完全非标准且不可移植的,并且在人们使用它的绝大多数地方都没有任何可衡量的好处。除非您将打开文件的限制从 1024 增加到 50000 或更多,否则您所做的一切都会使您的代码无缘无故地不可移植。

标签: c linux file-io linux-kernel epoll


【解决方案1】:

来自man page

Q3 是 epoll fd 本身 poll/epoll/可选择?

A3 是的。

【讨论】:

  • 是的,但这有什么作用呢?例如,通过该文件描述符读取 select()-ing 是做什么的?如果我从中读取会发生什么?
  • 在你 epoll_wait 时发生的事情或多或少是一样的,除了你可以一次在多个 epoll fds 上做这件事。但无论如何,您可能只希望每个线程有一个 epoll FD。
【解决方案2】:

你可以poll(2)你的epoll_fd自己:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2021-10-09
    • 2013-10-03
    • 2014-12-20
    • 2016-10-19
    相关资源
    最近更新 更多