gpt4 book ai didi

c - 读取许多真实的文件描述符

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:54 25 4
gpt4 key购买 nike

正在开发 Linux (Ubuntu) 应用程序。我需要以非阻塞方式读取许多文件。不幸的是,epoll 不支持真正的文件描述符(来自文件的文件描述符),它支持作为网络套接字的文件描述符。 select 确实适用于真实的文件描述符,但它有两个缺点,1) 它很慢,线性地遍历所有设置的文件描述符,2) 它是有限的,它通常不允许超过1024 个文件描述符。

我可以将每个文件描述符更改为非阻塞并使用非阻塞“读取”来轮询,但它非常昂贵,尤其是当有大量文件描述符时。

这里有哪些选项?

谢谢。

更新 1这里的用例是创建某种文件服务器,许多客户端请求文件,以非阻塞方式为它们提供服务。由于网络端实现(不是标准的 TCP/IP 堆栈),无法使用 sendfile()。

最佳答案

您可以将多个 select 调用与线程或 fork 结合使用。这将减少每个 select 集的 FD_ISSET 调用数。

也许您可以提供有关您的用例的更多详细信息。听起来您正在使用 select 来监视文件更改,这与您对常规文件的预期不同。也许您只是在寻找 flock

关于c - 读取许多真实的文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29866132/

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