gpt4 book ai didi

c - epoll 立即返回标准输入

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:46 24 4
gpt4 key购买 nike

我尝试使用标准输入和其他一些 fd 进行非阻塞 IO。我将它们添加到 rust 库 mio 中,但是在使用 strace 进行调试时我发现这是一个 epoll 问题。

当我将标准输入添加到 epoll 时,epoll_wait 立即返回。我是否连接了 shell/term 或通过管道输入其他内容(例如 cat)都没关系。

观察这一点的最小 C 代码:

#include <sys/epoll.h>
#include <stdio.h>
#include <unistd.h>
int main(void)
{
char buffer[4096];
int fd = epoll_create(5);

struct epoll_event event;

event.events = EPOLLIN;
event.data.fd = 0;

epoll_ctl(fd, EPOLL_CTL_ADD, 0, &event);

for (;;) {
fprintf(stderr, "Going into epoll_wait\n");
epoll_wait(fd, &event, 1, 0);
fprintf(stderr, "Going into read: %d\n", event.data.fd);

printf("%ld\n", read(0, buffer, sizeof(buffer)));
}
}

最佳答案

epoll_wait() 的超时值0 表示:立即返回并且只报告当前未决的事件。

您需要指定超时值 -1,这意味着“无限期地等待事件”:

epoll_wait(fd, &event, 1, -1);

然后它应该按预期工作。

关于c - epoll 立即返回标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44848896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com