文件描述符的申请与回收

最近弄定时器,需要一个类似 Linux 中文件描述符的概念。每启动一个定时器都返回一个定时器的 handle (fd).

handle 从 0 开始,生成时永远取其取值范围内最小的数字。于是有:

 1 #include <set>
 2 
 3 class FDManager
 4 {
 5 public:
 6     FDManager():cfg_fd_count(1024 * 1024), cur_max_fd(0){ unused_fd.clear(); }
 7     ~FDManager(){}
 8 public:
 9     int getUnusedFd()
10     {
11         if(cur_max_fd >= cfg_fd_count)
12             return -1;
13 
14         if(unused_fd.empty())
15             return cur_max_fd++;
16         
17         int fd = *unused_fd.begin();
18         unused_fd.erase(unused_fd.begin());
19         
20         return fd;
21     }
22 
23     void putUnusedFd(int fd)
24     {
25         unused_fd.insert(fd);
26     }
27 
28 private:
29     int cfg_fd_count;
30 
31 private:
32     int cur_max_fd;
33     std::set<int> unused_fd;
34 };
原文地址:https://www.cnblogs.com/hangj/p/7823532.html