gpt4 book ai didi

c - 有没有办法将文件描述符与用户定义的数据相关联?

转载 作者:太空狗 更新时间:2023-10-29 14:57:59 26 4
gpt4 key购买 nike

我正在编写一个客户端-服务器应用程序,它使用 POSIX poll 函数来提供一种并发客户端处理形式。客户端还具有状态和其他相关数据,这些数据存储在客户端结构中。

我的直接问题是,当我从 poll 得到提示,在与客户端关联的套接字文件描述符上执行 I/O(概念上)时,我必须实际匹配文件描述符到其关联的客户端数据结构。目前,我进行了一次O(n_clients) 查找(我的客户端数据结构存储了描述符),但我想知道是否存在更好的选择?

最佳答案

没有。如果有,内核必须跟踪它,因此查找该数据将涉及系统调用。系统调用的成本比在用户空间中执行 O(n) 查找要昂贵一个数量级。

您同时与多少客户打交道?除非它是数百或更多的数量级,否则查找的成本与执行任何类型的 I/O 的成本相比将是微不足道的。

除了使用 O(n) 查找,您还可以只使用由文件描述符索引的数组,假设您一次打开的描述符不会超过一定数量。例如:

#define MY_MAX_FD 1024  // Tune this to your needs
void *per_fd_data[MY_MAX_FD];

void *get_per_fd_data(int fd)
{
assert(fd >= 0);
if(fd < MY_MAX_FD)
return per_fd_data[fd];
else
{
// Look up fd in a dynamic associative array (left as an exercise to the
// reader)
}
}

关于c - 有没有办法将文件描述符与用户定义的数据相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8175746/

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